gpt4 book ai didi

java - MySQL 和 Java : Byte array not same when retrieved as it was when stored

转载 作者:行者123 更新时间:2023-11-29 11:28:52 25 4
gpt4 key购买 nike

我正在为用户创建一个表,其中包含其散列密码及其盐。

问题是,当我在表中创建用户行并保存盐和密码(两者都存储在 VARBINARY 列中)并尝试当用户重新登录时取回该数据,返回的盐和散列密码与我创建行时不同。

为了获取数据,我使用 ResultSet 并调用 resultSet.getBytes("password")

为了创建行,我使用这样的查询(删除了其他列数据以使其更简单):

String query = String.format("insert into users (`password`, `salt`) values ('%s','%s');", user.getHashedPassword(), user.getSalt());

是否存在某些转换或正在发生的事情导致此问题?我应该使用 VARBINARY 以外的其他内容来存储 byte[] 吗?

最佳答案

Could there be some conversion or something that is happening that causes this problem?

是的。您基本上是在字节数组上调用toString()。那不会做你想做的事。你查看过正在执行的 SQL 吗?

更重要的是,无论如何,您都不应该生成这样的 SQL 字符串 - 这种方法很容易受到 SQL Injection Attacks 的攻击。以及转换问题。

相反,应使用带有参数化 SQL 的 PreparedStatement,并直接指定参数值(PreparedStatement.setBytes 等)。

更广泛地说,最好不要推出自己的身份验证代码 - 寻找一个适合您正在使用的任何框架的现有库,这可能会避免众多安全问题自己动手时很容易创建漏洞。

关于java - MySQL 和 Java : Byte array not same when retrieved as it was when stored,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37750449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com