Sub*_*Pal 5 java base64 encoding apache-commons-codec string-decoding
我将使用一种算法来编码从XML文件中检索的可变长度但非常长的String字段,然后该编码数据应该保留在数据库中.
后来,当我收到第二个文件时,我需要从数据库中获取编码数据(先前存储过的),然后对其进行解码并使用新数据验证是否重复.
我试过org.apache.commons.codec.binary.Base64它有2种方法:
encodeBase64(Byte[] barray)decodeBase64(String str)它完美无缺,解决了我的问题.但它将55个字符串转换为仅6个字符串.
所以我想知道是否存在这些算法编码2个字符串的情况,这些字符串非常大并且只有1个字符不匹配(例如)到相同的编码字节数组中.
我Base64不太了解课程,但如果有人能帮助我,那将非常有帮助.
如果你可以建议任何其他算法使一个大的String短的固定长度并解决我的目的,我将很乐意使用它.
提前致谢.
joh*_*tok 12
不是很有效率.
此外,使用sun.misc类提供了一个非便携式应用程序.
查看MiGBase64的以下性能比较:

所以我想知道是否存在这些算法编码2个字符串的情况,这些字符串非常大并且只有1个字符不匹配(例如)到相同的编码字节数组中.
Base64不是散列算法,它是一种编码,因此必须是双向的.必然不允许碰撞 - 否则解码将是非确定性的.Base64旨在表示ASCII字符串中的任意二进制数据.将Unicode字符串编码为Base64通常会增加所需的代码点数,因为Unicode字符集需要多个字节.Unicode字符串的Base64表示形式将根据使用的编码(UTF-8,UTF-16)而有所不同.例如:
Base64( UTF8( "test" ) ) => "dGVzdA=="
Base64( UTF16( "test" ) ) => "/v8AdABlAHMAdA=="
解决方案1
使用无损压缩
GZip( UTF8( "test" ) )
在这里,您将字符串转换为字节数组,并使用无损压缩来减少必须存储的字节数.您可以改变字符编码和压缩算法,以减少字节数,具体取决于您将要存储的字符串(即,如果它主要是ASCII,那么UTF-8可能是最好的.
优点:无冲突,恢复原始字符串的能力
缺点:存储值所需的字节数是可变的; 存储值所需的字节数较大
解决方案2
使用散列算法
SHA256( UTF8( "test" ) )
在这里,您将使用散列函数将字符串转换为固定长度的字节集.散列是单向的,并且本质上可以发生碰撞.但是,根据您希望处理的字符串和字符串数量,您可以选择哈希函数以最小化冲突的可能性
优点:存储价值所需的字节数是固定的; 存储值所需的字节很小
缺点:可能发生冲突,无法恢复原始字符串
| 归档时间: | 
 | 
| 查看次数: | 14643 次 | 
| 最近记录: |