Java 为什么salt的长度应该与散列值相同?
我已经读到,将要使用的salt应该具有与散列密码相同的长度,这背后的原因是什么?它会增加密码保护吗? 我读过了 : 为了使攻击者无法为每种可能的salt创建查找表,salt必须很长。一个好的经验法则是使用与哈希函数输出大小相同的salt。例如,SHA256的输出是256位(32字节),因此salt应该至少是32个随机字节Java 为什么salt的长度应该与散列值相同?,java,security,passwords,Java,Security,Passwords,我已经读到,将要使用的salt应该具有与散列密码相同的长度,这背后的原因是什么?它会增加密码保护吗? 我读过了 : 为了使攻击者无法为每种可能的salt创建查找表,salt必须很长。一个好的经验法则是使用与哈希函数输出大小相同的salt。例如,SHA256的输出是256位(32字节),因此salt应该至少是32个随机字节 我认为salt的强度应该与密码的强度大致相同,因为两者都应该能够抵抗暴力攻击 简单的salt会更容易受到攻击,但即使是简单的salt也会使攻击比没有salt更为困难。很好地说明
我认为salt的强度应该与密码的强度大致相同,因为两者都应该能够抵抗暴力攻击 简单的salt会更容易受到攻击,但即使是简单的salt也会使攻击比没有salt更为困难。很好地说明了为什么需要密码salt 不,您不需要您的salt与密码长度相同。事实上,本文中列出的所有实现都没有做到这一点。通常,每增加一点盐,攻击者就需要将其存储预算翻倍
因此,拥有10字节的salt应该足以满足当今的技术水平。还要注意的是,salt是二进制值,而密码不是二进制值,因此salt的长度应该以位/字节而不是字符来度量。salt没有特别的必要那么长,尽管它肯定不会有什么坏处 a应该满足的唯一真正要求是它应该是全局唯一的。即使这也不是一个严格的要求,因为有一些重复的盐对攻击者并没有多大帮助。只有当你得到大量的复制品时,盐才会开始失去它的效力 特别是,由于,如果随机选择盐,理想情况下,盐的长度应至少为2·log2(n)位,其中n是您期望拥有的最大用户数(或者更一般地说,是您期望使用所选哈希方法的最大用户数)。当然,在上面加上一些安全余量总是一个好主意
特别是,地球上的总人口略多于232。这意味着,即使地球上的每个人都为您的系统注册了一个帐户,64位salt仍然足够。您从哪里读到的?
使得攻击者无法为每个可能的salt创建查找表,盐一定很长。
这是你的问题最适合的答案。@jweyrich:或者。我不知道有Security.SE这样的东西,如果这样,请移开问题。盐不需要抵抗暴力攻击。这不是秘密。它所需要的是独一无二的。