【发布时间】:2021-08-07 13:16:14
【问题描述】:
在 django 中,用户表密码使用安全算法 (pbkdf2_sha256) 自动加密,并带有盐和迭代。但我不明白的是为什么 django 密码字段以这种格式显示算法、迭代和盐:
<algorithm>$<iterations>$<salt>$<hash>
我认为这些信息是秘密的,我只想显示哈希值。
【问题讨论】:
-
因为您可以使用不同的算法、迭代和盐。如果不指定这一点,Django 无法对密码执行相同的操作以查看哈希是否匹配。
-
但是显示盐和迭代安全吗?
-
通常你不应该暴露任何密码字段。但是如果我们使用盐,它会使搜索空间更大(特别是如果每条记录都有不同的盐)。
-
不,通常哈希函数被视为单向函数:这意味着计算哈希(非常)快,而找到一个项目x f(x) 是给定哈希的 只能通过穷举搜索来完成。
-
一个好的散列函数的想法是,即使完全了解盐等,您也无法有效地确定真正的密码。以 AES 加密为例:即使您知道通信是通过 AES 加密进行的,只要您没有私钥,您就无法有效地了解参与者在说什么关于,或者至少在撰写本文时,没有任何出版物声称它可以“破解” AES 加密。
标签: django