Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java 为什么salt的长度应该与散列值相同?_Java_Security_Passwords - Fatal编程技术网

Java 为什么salt的长度应该与散列值相同?

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。例如,SHA256的输出是256位(32字节),因此salt应该至少是32个随机字节


我认为salt的强度应该与密码的强度大致相同,因为两者都应该能够抵抗暴力攻击

简单的salt会更容易受到攻击,但即使是简单的salt也会使攻击比没有salt更为困难。

很好地说明了为什么需要密码salt

不,您不需要您的salt与密码长度相同。事实上,本文中列出的所有实现都没有做到这一点。通常,每增加一点盐,攻击者就需要将其存储预算翻倍


因此,拥有10字节的salt应该足以满足当今的技术水平。还要注意的是,salt是二进制值,而密码不是二进制值,因此salt的长度应该以位/字节而不是字符来度量。

salt没有特别的必要那么长,尽管它肯定不会有什么坏处

a应该满足的唯一真正要求是它应该是全局唯一的。即使这也不是一个严格的要求,因为有一些重复的盐对攻击者并没有多大帮助。只有当你得到大量的复制品时,盐才会开始失去它的效力

特别是,由于,如果随机选择盐,理想情况下,盐的长度应至少为2·log2(n)位,其中n是您期望拥有的最大用户数(或者更一般地说,是您期望使用所选哈希方法的最大用户数)。当然,在上面加上一些安全余量总是一个好主意


特别是,地球上的总人口略多于232。这意味着,即使地球上的每个人都为您的系统注册了一个帐户,64位salt仍然足够。

您从哪里读到的?
使得攻击者无法为每个可能的salt创建查找表,盐一定很长。
这是你的问题最适合的答案。@jweyrich:或者。我不知道有Security.SE这样的东西,如果这样,请移开问题。盐不需要抵抗暴力攻击。这不是秘密。它所需要的是独一无二的。