【问题标题】:SecureRandom generates values of different lengthSecureRandom 生成不同长度的值
【发布时间】:2013-08-01 20:46:32
【问题描述】:

我有一个需要加盐密码的应用程序。为了生成盐,我决定使用SecureRandom。当我在我的 Windows 机器上时,一切都很好。然后我尝试在基于 Linux 的机器(Centos 5)上运行我的代码,结果一切都崩溃了。

我隔离了问题并创建了这个测试用例:

public static void main(String[] args)  {
    SecureRandom sr = new SecureRandom();
    byte[] saltBytes = new byte[256];
    sr.nextBytes(saltBytes);
    String salt = new String(saltBytes);
    System.out.println(salt.length());
}

在 Windows 中,输出始终是 256,但在我的 Linux 机器上,输出会发生变化,并且永远不会是 256。它似乎总是生成长度小于 256 的盐。

有人知道为什么会这样吗?

解决方案:

我刚刚将新的字符串行更改为new String(saltbytes, "ASCII");

【问题讨论】:

  • 你没有设置String的字符集,使用String(byte[] bytes, Charset charset)构造函数。
  • 您不应该尝试将二进制数据放入文本字​​符串中。这通常会导致混乱。

标签: java salt


【解决方案1】:

问题在于字符编码。在 linux 上通常是 utf-8,这是一种可变长度编码。如果您想要一个字符串,请改用 base64。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多