在sql中有关于密码的问题:
Update Teacher
SET TeacherSalt = SUBSTRING(MD5(RAND()),-10),TeacherPassword = SHA1(CONCAT('009b9b624aaecc4b3217dcd4bfee15ab704745d7',SUBSTRING(MD5(RAND()),-10)))
WHERE TeacherPassword = '009b9b624aaecc4b3217dcd4bfee15ab704745d7'
但我的问题是我想要更改盐,以便它生成的字符串来自所有这些字符:
./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
有63个字符. PHP的方式如下:
$salt = "";
for ($i = 0; $i < 40; $i++) {
$salt .= substr(
"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",mt_rand(0,63),1);
}
但是我怎么能用上面的sql方式写这个呢?
最佳答案
如果你真的想要随意加盐,那么只能通过用PHP生成随机盐并用该盐加密密码并将盐密钥和密码存储在表的两个字段中来实现.表必须具有salt字段和密码字段.但是,如果您只是想使用MysqL进行加密而不是在这里查看http://dev.mysql.com/doc/refman/5.5/en//encryption-functions.html
当我们验证用户的登录凭据时,我们遵循相同的过程,只是这次我们使用数据库中的salt而不是生成新的随机数据.我们向其添加用户提供的密码,运行我们的散列算法,然后将结果与存储在该用户配置文件中的散列进行比较.
以下链接可能会为您提供更多想法.
How do you securely store a user’s password and salt in MySQL?
Where do you store your salt strings?
How insecure is a salted SHA1 compared to a salted SHA512
Salt Generation and open source software
我希望你现在有了这个主意.