繁体   English   中英

Java字节到字符串给出奇怪的结果?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM