首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java给出了奇怪的结果?

Java给出了奇怪的结果?
EN

Stack Overflow用户
提问于 2016-01-05 02:48:18
回答 1查看 638关注 0票数 1

我有这样的代码:

代码语言:javascript
复制
 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()生成的16字节IV。(至少我想它就是这么做的吧?)然而,当我使用这个时:

代码语言:javascript
复制
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}cf0

我正在试图找出这个应用程序是如何生成用于加密/解密的加密密钥的。上面的结果肯定不可能是什么对吧?我是不是完全走错路了?

我在这里包含了完整的类代码,以防有帮助:http://pastie.org/private/5fhp9yqknzoansd1vc0xfg

我很想知道上面的代码实际上在做什么,这样我就可以将它移植到PHP,而不是太好的@ Java。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 03:09:55

您的输出7ª7é­g}ÇÞFf0对我来说是有意义的。

您使用的是字符集:ISO-8859-1,因此字节将被解码到它们在该字符集中映射到的字符。

字节数组使用基10创建,java字节被签名。这意味着字节数组具有以下十六进制值(按顺序排列):

代码语言:javascript
复制
37, AA, 9A, 37, E9, 1A, AD, 67, 7D, C7, 92, DE, 46, 66, 30, 99

根据ISO-8859-1字符集,这些值映射为:

代码语言:javascript
复制
7, ª, (nil), 7, é, (nil), SHY, g, }, Ç, (nil), Þ, F, f, 0, (nil)

这和你的字符串非常接近。(nil)字符不会在字符串中呈现,因为字符集没有对应值的符号。对于字符羞涩,我将再次假设没有字形(而标准表明实际上应该有)。

你的输出在我看来是正确的!:)

记住,您的加密密钥只是一个字节序列。你不应该期望数据是人类可读的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34603426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档