Str*_*rry 7 php encryption passwords
用户系统和密码:我正在查看MD5的内容,我想知道密码的正常/良好做法是什么.现在,我认为人们会加密密码并存储哈希值.如果是这样,密码检查如何工作?我只是输入密码再次通过加密过程然后用存储的密码检查哈希,对吗?
这个问题可能与上述内容相矛盾,但我的盐是否应该是随机生成的值?如果是的话,何时可能有用?
编辑:除了密码,在用户系统中,还应该加密哪些作为一种好的做法?他们加密用户名或其他任何东西吗?
第二编辑:什么是单向哈希?我的意思是,从技术上讲,我可以不对我的源代码进行反向工程吗?也许这是一个糟糕的问题,因为我对单向哈希知之甚少.
Jos*_*h K 10
首先你创造一个盐.
注意示例是用PHP编写的
// Setup a salt, this isn't "random" but it doesn't really have to be
$salt = sha1(microtime());
Run Code Online (Sandbox Code Playgroud)
然后加密密码
// First we hash the password, then XOR it with the salt hashing the result
$hash = sha1(sha1($password) ^ $salt);
Run Code Online (Sandbox Code Playgroud)
存储$hash和$salt数据库.
当用户输入密码时,将其与散列进行比较
if(sha1(sha1($entered_password) ^ $salt) == $hash)
// Correct password
Run Code Online (Sandbox Code Playgroud)
切勿以可逆格式存储密码.另外我建议不要使用MD5作为哈希.
编辑:除了密码,在用户系统中,还应该加密哪些作为一种好的做法?他们加密用户名或其他任何东西吗?
密码未加密,它们是经过哈希处理的.将哈希(非常简单)描绘成需要数字并将其乘以10的东西.说我想哈希这个数字30.我会说30*10并得到300我的"哈希" 30.需要注意的是,你不能获得30来自300不知道哈希函数是如何工作的.
这是一个非常简单的"哈希",如果你知道它总是乘以十,那么你可以很容易地逆转它.现在来看看SHA1哈希函数.这要复杂得多.它不能简单地逆转.
您会发现除密码哈希之外很少有任何东西,并且没有任何内容被加密.加密数据库所需的开销将是巨大的.
我想你可以在用户名中应用类似的salt/hash模式,但是你有陷阱.如果您想在代码中的某个位置使用该用户名,该怎么办?如果您想检查以确保它是独特的桌子怎么办?
第二编辑:什么是单向哈希?我的意思是,从技术上讲,我可以不对我的源代码进行反向工程吗?也许这是一个糟糕的问题,因为我对单向哈希知之甚少.
见上文(或点击此处).单向哈希就是这样.单向映射.A => B没有别的.B !=> A,A除了以外什么都不能B.
有人提到了一项XOR行动的表现.虽然我觉得性能基本上可以忽略不计,但我还是进行了快速测试.
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
Run Code Online (Sandbox Code Playgroud)
现在跑
$start_time = $this->microtime_float();
for($i = 0; $i < 100000; $i++)
{
$sha = sha1(sha1(microtime()) . sha1(microtime()));
}
$end_time = $this->microtime_float();
echo "1000 in " . ($end_time-$start_time) . " for CAT\n";
$start_time = $this->microtime_float();
for($i = 0; $i < 100000; $i++)
{
$sha = sha1(sha1(microtime()) ^ sha1(microtime()));
}
$end_time = $this->microtime_float();
echo "1000 in " . ($end_time-$start_time) . " for XOR\n";
Run Code Online (Sandbox Code Playgroud)
尽可能多地重复.在最初的书面记录使用错误日志,我得到了以下结果:
1000 in 0.468002796173 XOR
1000 in 0.465842008591 XOR
1000 in 0.466115951538 XOR
1000 in 0.498080968857 CAT
1000 in 0.506876945496 CAT
1000 in 0.500174045563 CAT
Run Code Online (Sandbox Code Playgroud)