使用Python在MySQL数据库中对密码进行SHA512哈希处理

3

这个问题基于答案

我想知道如何通过SHA1在MySQL数据库中哈希密码,然后通过Python删除明文密码。

如何通过Python在MySQL数据库中哈希密码?


2
如果没有必要,不要使用SHA1。SHA2-256或SHA2-512是更安全的选择,如果这是一个新应用程序,则没有向后兼容性要求使用SHA1。 - kquinn
1
对于密码来说,SHA1 可能过于复杂了。对于大多数应用程序来说,一个好的盐和 MD5 已经足够强大了。 - Thomas Owens
5
为什么要冒险呢?只需将hashlib.md5更改为hashlib.sha512,就可以使用更好的哈希算法,这是一个非常微不足道的更改!MD5已经过时了,任何不知道这点的人都不应该接触密码。 - kquinn
感谢评论!标题已修正。 - Léo Léopold Hertz 준영
听kquinn的,不要听Thomas Owens的。没有理由使用低档选项。 - pbreitenbach
4个回答

12

根据文档所说,你应该使用hashlib库而不是sha,自从Python 2.5版本以后。

很容易做出一个哈希值。

hexhash = hashlib.sha512("some text").hexdigest()

这个十六进制数在数据库中存储将会很容易。


5
最好使用hexhash = hashlib.sha512("some text" + salt).hexdigest()的方式,其中salt是为每个密码生成并存储在数据库中的随机字符串。这有助于避免彩虹表攻击。 - David Johnstone

7
如果您在数据库中存储密码,建议阅读Jeff的You're Probably Storing Passwords Incorrectly。该文章描述了使用盐和存储密码时容易出错的一些事情。请注意,盐是一种加密技术,可增强密码的安全性。

4

2
自 Python 2.5 开始,它已被弃用,您现在应该使用 http://docs.python.org/library/hashlib.html#module-hashlib (尽管我相信此回答在2009年发布时是有效的)。 - Buttons840

1

在哈希密码时,不要删除明文密码。你需要做的是接受用户输入,对输入进行哈希处理,并将哈希值与数据库中存储的哈希值进行比较。你永远不应该存储或发送用户的明文密码。

话虽如此,你可以在旧版本的Python中使用sha库正如scrager所说,在新版本的Python中使用hashlib库正如David Raznick所说


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接