Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x SHA256是存储密码的好方法吗?(py3格式)_Python 3.x_Passwords_Sha256 - Fatal编程技术网

Python 3.x SHA256是存储密码的好方法吗?(py3格式)

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

假设我希望在代码中存储密码。SHA256是存储它们的足够好的方法吗

下面是代码的样子:

#!/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) 碰撞是个问题吗

不,您极不可能发现另一个密码产生相同的哈希值,实际上这可以忽略。这种碰撞的可能性还有另一个好处