gpt4 book ai didi

mysql - 如何使用 servlet 将密码哈希并加盐到 mysql 数据库中?

转载 作者:行者123 更新时间:2023-11-29 18:09:13 24 4
gpt4 key购买 nike

这是我从 servlet 中得到的内容

Random random = new Random();
String salt = Integer.toString(random.nextInt(1000000000 - 1 + 1) + 1);

String sql = "insert into users (user_name, salt, password) "
+ "values (?, ?, ?)";

c = DriverManager.getConnection( url, username, password );
PreparedStatement pstmt = c.prepareStatement( sql );
pstmt.setString( 1, userName );
pstmt.setString( 2, salt);
pstmt.setString( 3, "SHA2(CONCAT('" +password1+ "', "+ salt +"), 256)");

用户名和密码的值已正确存储在服务器上,但密码未正确存储。对于给定值,它存储为以下 SHA2(CONCAT('edf', 733903552), 256)。

我假设 SHA2 和 CONCAT 函数没有生效,已经研究了一段时间但不明白为什么。

最佳答案

这是一个正在传递的字符串文字,这就是正在存储的内容。考虑:

 String foo = "SHA2(CONCAT('" +password1+ "', "+ salt +"), 256)";
pstmt.setString( 3, foo );

foo 的值是在 SQL 语句中作为值传入的。

MySQL 不会将该字符串的任何内容视为 SQL 文本...它只是一个字符串。 (这是我们想要的行为。准备好的语句和绑定(bind)占位符的一大好处是防止 SQL 注入(inject),即防止被解释为 SQL 的一部分。)

如果您希望 CONCAT 和 SHA2 函数作为 MySQL 函数执行,这些函数需要成为 SQL 文本的一部分。只需传入(作为值)password1salt

类似这样的事情:

 String sql = "insert into users (user_name, salt, password)"
+ " values (?, ?, SHA2(CONCAT( ? , ? ),256) )";


pstmt.setString( 1, userName );
pstmt.setString( 2, salt );
pstmt.setString( 3, password1 );
pstmt.setString( 4, salt );

关于mysql - 如何使用 servlet 将密码哈希并加盐到 mysql 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47537908/

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