MySQL和Java:检索到的字节数组与存储时的字节数组不同

vedi0boy

我正在为用户创建一个包含其哈希密码的表,这很麻烦。

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

要获取我正在使用的数据,ResultSet然后致电resultSet.getBytes("password")

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

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

可能发生某些转换或正在发生的事情导致此问题?除了VARBINARY存储以外我还应该使用其他东西byte[]吗?

乔恩·斯基特

可能发生某些转换或正在发生的事情导致此问题?

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

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

而是使用PreparedStatement带参数化SQL的,并直接指定参数值(PreparedStatement.setBytes等)。

更广泛地说,最好不要完全使用自己的身份验证代码-寻找一个与您正在使用的框架相适应的现有库,这很可能避免它所带来的众多安全漏洞。自己动手做起来太容易了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章