我的哈希和加盐正确吗?
密码和盐是否应该在散列之前连接在一起?
如果用户创建密码“Banana”,并且将盐“ABC123”添加到密码末尾,则您将得到“BananaABC123”。然后该密码将被散列。因此,当用户尝试使用纯文本登录时“香蕉”..数据库是否知道从末尾删除 ABC123 盐(用户不知道)并允许他登录?
或者我完全误解了这一点?我对此很陌生。
import hashlib
import os
def hash(password):
bytes = password.encode('utf-8')
object = hashlib.sha256(bytes)
return object.hexdigest()
user_input = input()
random = os.urandom(15)
stored = random
password = (f"{user_input}{stored}")
hash = hash(password)
print(hash)
通常,当服务器检查给定的密码时,它会对密码运行相同的操作,即连接盐并计算哈希值。
盐避免比较不同站点的破解数据库以查看是否出现相同的哈希值(用于查找常用密码)。 IE。当使用不同的秘密盐时,相同的密码具有不同的哈希值。
例如,Django 将秘密盐(除了算法和附加参数以及密码哈希之外)存储在数据库中。请参阅Django 中的密码管理。