[英]Java Byte to String giving weird result?
我有以下代码:
private static c e;
private static byte[] f = { 55, -86, -102, 55, -23, 26, -83, 103, 125, -57, -110, -34, 70, 102, 48, -103 };
private String a;
private SecureRandom b;
private int c;
private byte[] d;
public c(String paramString, SecureRandom paramSecureRandom)
{
this.a = paramString;
this.b = paramSecureRandom;
}
public static c a()
{
if (e == null)
{
e = new c("AES/CBC/PKCS7Padding", new SecureRandom());
e.a(f, 16);
}
return e;
}
f是字节数组,而16是读取由SecureRandom()生成的IV的16个字节。 (我至少假设这是在做什么?)但是,当我使用此命令时:
byte[] byteArray = { 55, -86, -102, 55, -23, 26, -83, 103, 125, -57, -110, -34, 70, 102, 48, -103 };
String value = new String(byteArray, "ISO-8859-1");
System.out.println(value);
我得到以下输出:7ª7ég}ÇÞFf0
我正在尝试弄清楚我的这个应用程序如何生成用于加密/解密的加密密钥...上述结果肯定是不正确的? 我在这里完全走错了路吗?
如果有帮助,我在此处包括了完整的类代码: http : //pastie.org/private/5fhp9yqknzoansd1vc0xfg
我真的很想知道上面的代码在做什么,所以我可以将其移植到PHP,而不是@ Java。
提前致谢。
您的输出7ª7ég}ÇÞFf0
对我来说很有意义。
您正在使用字符集: ISO-8859-1 ,因此字节将被解码为它们在该字符集中映射到的字符。
您的字节数组使用10为基数创建,并且对Java字节进行了签名。 这意味着您的字节数组具有以下十六进制值(按顺序):
37, AA, 9A, 37, E9, 1A, AD, 67, 7D, C7, 92, DE, 46, 66, 30, 99
根据ISO-8859-1字符集,这些值映射到以下内容:
7, ª, (nil), 7, é, (nil), SHY, g, }, Ç, (nil), Þ, F, f, 0, (nil)
这与您的字符串实际上非常接近。 (nil)
字符未在您的字符串中呈现,因为该字符集没有对应值的字形。 对于字符SHY ,我将再次假设没有字形(而标准指示实际上应该有)。
您的输出对我来说似乎是正确的! :)
请记住,您的加密密钥只是一个字节序列。 您不应该期望数据是人类可读的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.