我想知道这是否是一种安全的身份验证方法:
theInput = raw_input("Enter password: ")
theHashed = hashlib.sha512(theInput).hexdigest()
if theHashed == "35211b890b19afebfabc3451f04d150f1423bcb54ff7d62095677d7af7560fcvb56c112e879288836cb506853516c5dbd1d779cfaedf4a2f6f6a303600c0c589":
print "Correct!"
如果没有,我该怎么做才能让它更安全?
答案 0 :(得分:4)
也许,只要有人无法阅读或修改您的代码。
如果这是在一台计算机上本地运行的程序,并且该文件的安装方式使普通用户无法更改它,并且您知道没有安装键盘记录器,那么也许没关系。< / p>
即使用户可以读取此文件,他们也可以制作副本并修改其副本以删除身份验证步骤。
程序安全性是一个复杂而深刻的主题,不仅仅是选择散列算法。
答案 1 :(得分:2)
Greg Hewgill的第一点值得强调。我刚刚发现 - 有点令我惊讶的是 - 在我的笔记本上,系统hashlib.py向全世界开放。因此,击败上述认证是微不足道的:
localhost-2:coding $ cat hashcrack.py
class always_equal(object):
def __eq__(self, other):
return True
class sha512(object):
def __init__(self, password):
pass
def hexdigest(self):
return always_equal()
localhost-2:coding $ cat hashcrack.py >> /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py
localhost-2:coding $ cat notsosecure.py
import hashlib
theInput = raw_input("Enter password: ")
theHashed = hashlib.sha512(theInput).hexdigest()
if theHashed == "35211b890b19afebfabc3451f04d150f1423bcb54ff7d62095677d7af7560fcvb56c112e879288836cb506853516c5dbd1d779cfaedf4a2f6f6a303600c0c589":
print "Correct!"
localhost-2:coding $ python notsosecure.py
Enter password: pwned
Correct!
想想看,我甚至不需要制作一个新的sha512课程,我可以简单地在旧版本中使用monkeypatched hexdigest。
无论如何,+1表示你的哈希中的比特数不是主要的安全隐患..
答案 2 :(得分:2)
使用import getpass
然后使用theInput = getpass.getpass("Enter password: ")
代替raw_input()。
答案 3 :(得分:1)
对于一般的密码验证,您应该更多地考虑像PBKDF2和scrypt这样的KDF。您还应该查看新的加密库: