【发布时间】:2015-06-22 18:43:08
【问题描述】:
我在 Java 中将字节数组转换为字符串如下:
String str_bytearray = new String(bytearray_original);
然后,我用字符串恢复了原来的字节数组,如下:
byte[] bytearray_recovered = str_bytearray.getBytes();
但我想知道何时比较了 bytearray_original 和 bytearray_recovered。结果如下:
[48, 89, 48, 19, 6, 7, 42, -122, 72, -50, 61, 2, 1, 6, 8, 42, -122, 72, -50, 61, 3, 1, 7, 3, 66, 0, 4, 100, -27, 48, -31, 13, -33, 107, -90, 91, -9, 119, 121, -73, 83, -105, 51, -87, -109, -84, 99, 115, -123, 119, -117, -1, -62, 71, -32, 99, 4, -103, -115, -47, 113, -83, 8, -91, 14, -74, 113, -40, -26, 50, 111, 95, 71, -9, 112, 120, 16, 0, 113, -80, 124, -71, 53, -97, 69, -85, 38, -112, -30, -110, 115]
[48, 89, 48, 19, 6, 7, 42, -122, 72, -50, 61, 2, 1, 6, 8, 42, -122, 72, -50, 61, 3, 1, 7, 3, 66, 0, 4, 100, -27, 48, -31, 13, -33, 107, -90, 91, -9, 119, 121, -73, 83, -105, 51, -87, -109, -84, 99, 115, -123, 119, -117, -1, -62, 71, -32, 99, 4, -103, 63, -47, 113, -83, 8, -91, 14, -74, 113, -40, -26, 50, 111, 95, 71, -9, 112, 120, 16, 0, 113, -80, 124, -71, 53, -97, 69, -85, 38, 63, -30, -110, 115]
如您所见,两个字节与原始字节数组不同,即-115 to 63 和-112 to 63。
有没有可能解决这个问题?
注意:实际上原始和恢复的字节数组都是公钥。先将公钥转成字符串存入文件,读取公钥的字符串值后,恢复公钥验证签名。
bytearray_original 生成如下:
PublicKey signPublicKey = keypair.getPublic();
byte [] bytearray_original = signPublicKey.getEncoded();
感谢您的帮助。
问候
【问题讨论】:
-
这种转换的目的是什么?你想将你的字节数组作为字符串存储在某个地方还是只是出于好奇?
-
@sainaen,事实上原始和恢复的字节数组都是公钥。先将公钥转成字符串存入文件,读取公钥字符串值后,恢复公钥验证签名。
-
哦,好吧,所以你可能正在使用类似 bouncycastle 的东西来做你的加密工作。您可能想尝试
org.bouncycastle.util.encoders.Hex.toHexString()和Hex.decode()之类的方法——它们适用于任意二进制数据。 -
@sainaen,是的,没错。但我不知道如何在自己身上使用您的代码。如果您可以在我的代码中使用它,我将不胜感激。谢谢。
-
啊,这不会很好地编码为 UTF-8 字符串,因为它是一堆随机数据。相反,您应该使用 Base64 对数据进行编码,如 Louis Wasserman 的答案或十六进制。