- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图对此进行研究,但仍有一些问题没有得到解答。我正在研究如何将 8 个字符的密码变成高位加密 key 。在我的研究过程中,我发现了一些关于盐值的文章。
假设您可以使用所有 256 个字符,那么 8 个字符的密码将是 64 位长。所以,剩下的 64 位只是一个盐值。而且,如果我错了,请纠正我,但这样做是为了如果有人要尝试 ALL 可能的值(蛮力),他们必须尝试所有 128 位,因为连盐都不知道。
我的问题确实与这个“盐”值有关:
最佳答案
与安全相关的问题一样,这个答案会很长。
首先,简单的答案。
问:如何将一个 8 字符的字符串变成一个 128 位的 key ?
A:没有。
这是一个真实的答案。现在,一个更适合您所要求的内容:
A:创建一个随机 64 位值,并将其与密码一起存储在数据库中。现在,密码是 key 的一半,随机值是另一半。
这是一个谎言。以下是您实际执行的操作:
答:使用产生 128 位或更长输出的方法对密码和随机盐进行哈希处理。使用其中的 128 位作为 key 。储存盐。
现在解决您关于盐的问题。首先,盐的目的并不是真正延长加密 key 。这是为了防止人们构建 彩虹表 - 从散列到未散列形式的映射。要查看您的加密没有更强,请想象攻击者知道您的 key 扩展算法。现在,他不再猜测 128 位 key ,而是猜测您的 64 位密码,然后使用相同的算法。瞧。如果攻击者不知道盐,是的,你已经获得了一点,但他们必须已经有了你的密文才能攻击它们,并且盐必须与密文一起存储在明文中。所以这是不太可能发生的情况。
/dev/random
的用途——系统熵池非常好。如果您担心,请购买更好的硬件 RNG。关于加密:如何将 8 个字符的字符串转换为 128 位 key 、256 位 key 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3347384/
我是一名优秀的程序员,十分优秀!