java - Java SecureRandom 创建的 salt 具有不同的 getBytes() 值

标签 java security salt

我使用 java SecureRandom 创建盐来加密用户。但是,当我尝试将用户与盐和密码匹配时,它们在不同的计算机上失败了。该用户是在 Linux 测试机器上创建的,我将数据库复制到我的 OS X 机器上。在测试机上匹配成功,但在我的 OS X 上失败。

使用以下代码,相同的盐得到不同的字节,甚至长度也不同:

salt.getBytes()

enter image description here

enter image description here

这是盐的生成过程:

        SecureRandom random = new SecureRandom();
        byte bytes[] = new byte[20];
        random.nextBytes(bytes);
        String salt = new String(bytes);
        user.setSalt(salt);

有可能 getBytes()相同的盐在不同的机器上可能有不同的值?

最佳答案

不要这样做:String salt = new String(bytes);

您正在使用机器的默认编码将一系列字节转换为字符串。您应该将字节数组保留为字节数组。

如果将数据存储在数据库中,则可以将其存储在二进制字符串列中(例如 postgresql 中的 bytea - 在其他数据库中可能是 blob)。

关于java - Java SecureRandom 创建的 salt 具有不同的 getBytes() 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30887009/

相关文章:

java - Java 23 小时制中的日期差异

java - 在 JPA Criteria API 的子查询中使用 ORDER BY 的替代方法是什么?

php - Ajax 登录和 javascript cookie,这安全吗?

security - 最佳密码盐长度

php - 我应该使用 urandom 还是 openssl_random_pseudo_bytes?

ubuntu - Vagrant:端口转发不起作用(没有服务 iptables 启动,由 salt 提供)

java - JForex 代码编辑器颜色更改

java - LinkedList 插入绑定(bind)到插入的对象

java - Java 中的 securitypack.jar 是什么?

html - 如何保护在别处使用的第三方 iframe