Zim*_*oot 9 java base64 json ascii85
我的工作项目是使用Jackson JSON序列化程序将一堆Java对象转换为字符串,以便将它们发送到REST服务.
其中一些对象包含敏感数据,因此我编写了自定义序列化程序来将这些对象序列化为JSON字符串,然后对其进行gzip,然后使用加密它们AES;
这会将字符串转换为字节数组,因此我在编解码器中使用Base64编码Apache commons器将字节数组转换为字符串.REST接口背后的自定义反序列化器可以反转此过程:
base64 decode -> decrypt -> decompress -> deserialize using default Jackson deserializer.
Base64编码增加了输出的大小(序列化中的gzip步骤旨在帮助改善这种增加),所以我检查了Google是否有更有效的替代方法,这使我进入了之前的堆栈溢出线程,将Ascii85编码提升为更有效的替代方案 -
Base64增加了33%的输出大小,Ascii85增加了25%的输出大小.
我找到了一些Java Ascii85实现,例如Apache pdfbox,但我对使用编码有点怀疑 - 似乎没有人使用或实现它,这可能只是意味着Base64具有更多的惯性,或者可能意味着Ascii85有一些不稳定的问题.
有没有人对此主题有更多了解?Ascii85有什么问题,这意味着我应该使用Base64吗?
Jon*_*eet 12
Base64是方式更常见.在大多数情况下,大小的差异确实不大,如果你在HTTP级别(将压缩base64)而不是在你的有效负载中添加,你可能会发现差异完全消失.
Ascii85有什么问题,这意味着我应该使用Base64吗?
我会强烈建议使用Base64只是因为它是如此更为普遍.这几乎是将二进制数据表示为文本的规范方式(当然,除非你想使用十六进制).
ASCII85 是一种很好的编码,用于节省额外的空间。但它会输出许多字符,如果天真地通过 HTTP 发送,则需要转义这些字符。Base64 编码有一个变体,可以通过 HTTP 发送而无需任何转义。
这是一个 javascript ASCII85 编码器,以防有人需要尝试:
// By Steve Hanov. Released to the public domain.
function encodeAscii85(input) {
var output = "<~";
var chr1, chr2, chr3, chr4, chr, enc1, enc2, enc3, enc4, enc5;
var i = 0;
while (i < input.length) {
// Access past the end of the string is intentional.
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
chr4 = input.charCodeAt(i++);
chr = ((chr1 << 24) | (chr2 << 16) | (chr3 << 8) | chr4) >>> 0;
enc1 = (chr / (85 * 85 * 85 * 85) | 0) % 85 + 33;
enc2 = (chr / (85 * 85 * 85) | 0) % 85 + 33;
enc3 = (chr / (85 * 85) | 0 ) % 85 + 33;
enc4 = (chr / 85 | 0) % 85 + 33;
enc5 = chr % 85 + 33;
output += String.fromCharCode(enc1) +
String.fromCharCode(enc2);
if (!isNaN(chr2)) {
output += String.fromCharCode(enc3);
if (!isNaN(chr3)) {
output += String.fromCharCode(enc4);
if (!isNaN(chr4)) {
output += String.fromCharCode(enc5);
}
}
}
}
output += "~>";
return output;
}Run Code Online (Sandbox Code Playgroud)
<input onKeyUp="result.innerHTML = encodeAscii85(this.value)" placeholder="write text here" type="text">
<p id="result"></p>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7403 次 |
| 最近记录: |