Python 3.x SHA256是存储密码的好方法吗?(py3格式)
假设我希望在代码中存储密码。SHA256是存储它们的足够好的方法吗 下面是代码的样子:Python 3.x SHA256是存储密码的好方法吗?(py3格式),python-3.x,passwords,sha256,Python 3.x,Passwords,Sha256,假设我希望在代码中存储密码。SHA256是存储它们的足够好的方法吗 下面是代码的样子: #!/usr/bin/python3 #The password is 'helloWorld' import hashlib hashedString = "11d4ddc357e0822968dbfd226b6e1c2aac018d076a54da4f65e1dc8180684ac3" for i in range(3): x = input('Password: ') # For now, i
#!/usr/bin/python3
#The password is 'helloWorld'
import hashlib
hashedString = "11d4ddc357e0822968dbfd226b6e1c2aac018d076a54da4f65e1dc8180684ac3"
for i in range(3):
x = input('Password: ') # For now, ignore the fact that it's exposed.
if hashlib.sha256(x.encode()).hexdigest() == hashedString:
print('Access granted!')
exit()
else:
print('Wrong password.')
print('3 attempts!')
现在,这方面存在问题,例如可能有其他字符串使用相同的SHA256哈希。那么,是否有其他方法来存储它们(不提供密码长度等明确信息)?如果PBKDF2可用,我建议使用它。看看这个,看看它是否提供了你所需要的 区别在于:
-PBKDF2设计速度慢
-SHA256是一个很好的散列函数;它并不慢,这是故意的 密码散列算法(如PBKDF2、bcrypt和scrypt)旨在与密码一起使用,并且有意降低速度。加密哈希算法很快。在大多数情况下,快速是好的,但在这里不是。减慢算法(通常通过迭代)会使攻击者的工作更加困难。密码散列还向每个散列添加一个salt值,使其唯一,以便攻击者不能同时攻击多个散列 有关为什么选择PBKDF2的更多信息,请参见此
编辑:PBKDF2还提供填充,因此您不会给出任何有关密码长度的信息。如果PBKDF2可用,我建议您使用它。看看这个,看看它是否提供了你所需要的 区别在于:
-PBKDF2设计速度慢
-SHA256是一个很好的散列函数;它并不慢,这是故意的 密码散列算法(如PBKDF2、bcrypt和scrypt)旨在与密码一起使用,并且有意降低速度。加密哈希算法很快。在大多数情况下,快速是好的,但在这里不是。减慢算法(通常通过迭代)会使攻击者的工作更加困难。密码散列还向每个散列添加一个salt值,使其唯一,以便攻击者不能同时攻击多个散列 有关为什么选择PBKDF2的更多信息,请参见此
编辑:PBKDF2还提供填充,因此您不会给出任何有关密码长度的信息。实际上,您的问题中包含两个不同的问题 1) 使用SHA-256存储密码是否足够安全 不,通常这是不够安全的,SHA-*散列可以非常快地计算出来,因此您可以使用暴力。如果您的密码非常强,那么SAH-256的一次迭代就足够安全了。一旦其他人能够确定密码,或者如果人类应该能够记住它,您绝对应该切换到BCrypt、PBKDF2或SCrypt 2) 碰撞是个问题吗
不,您极不可能发现另一个密码产生相同的哈希值,实际上这可以忽略。这种碰撞的可能性还有另一个好处。实际上,你的问题中包含两个不同的问题 1) 使用SHA-256存储密码是否足够安全 不,通常这是不够安全的,SHA-*散列可以非常快地计算出来,因此您可以使用暴力。如果您的密码非常强,那么SAH-256的一次迭代就足够安全了。一旦其他人能够确定密码,或者如果人类应该能够记住它,您绝对应该切换到BCrypt、PBKDF2或SCrypt 2) 碰撞是个问题吗 不,您极不可能发现另一个密码产生相同的哈希值,实际上这可以忽略。这种碰撞的可能性还有另一个好处