我有以下Visual Basic .NET函数,用于生成存储在内部数据库中的密码哈希值:
Public Function HashPassword(ByVal Password As String, ByVal Salt As String) As String
Dim pwd As String = Password & Salt
Dim hasher As New Security.Cryptography.SHA256Managed()
Dim pwdb As Byte() = System.Text.Encoding.UTF8.GetBytes(pwd)
Dim pwdh As Byte() = hasher.ComputeHash(pwdb)
Return Convert.ToBase64String(pwdh)
End Function
我需要帮助创建上述函数的PHP等价物:
示例:
Assuming a password string of: warn
A salt value of: i<|Xf":n_y_Yr"Lor`qAA].QK(2C8AJ:Z"\f&TC7bi=Acw_.w|
The returned hash should be: 0Yq3gR09U1GKfFRzmRxdJXK5jSQowHp/YLGA88p0s18=
我在PHP中复制哈希时遇到了麻烦。
亲切的问候,
Voxinator
答案 0 :(得分:2)
google中的第一个链接:(
使用sha256http://www.php.net/manual/en/function.hash.php http://www.php.net/manual/en/function.base64-encode.php
$pwd = 'warn';
$salt = 'i<|Xf":n_y_Yr"Lor`qAA].QK(2C8AJ:Z"\f&TC7bi=Acw_.w|';
$pwd .= $salt;
$r1 = hash('sha256', $pwd, true); // binary hash
$r2 = base64_encode($r1); // base64 representation
echo $r2;
输出
0Yq3gR09U1GKfFRzmRxdJXK5jSQowHp/YLGA88p0s18=
答案 1 :(得分:0)
这样的事情怎么样?
private static function hash($string) {
$result = '';
if (substr($string, 0, 1) == '#')
$result = $string;
else {
$result = '#' . hash('sha256', $string);
}
return $result;
}
您只需传递用户提供的密码,甚至是已经散列的密码,因为它会检测是否已经散列。当然这假设不允许以#
哈希字符开头的密码(并且之前会被捕获)。
答案 2 :(得分:0)
要散列passowrds,我目前正在使用类似于以下的函数:
function hashPassword($str, $salt='786df') {
hash('sha512', $salt.$str.'7');
}
这是一个SH512,带有动态盐(每个站点)和一个固定的盐(如果$ salt为空,则为盐,实际上是一个php常量)。这个解决方案非常安全,据我所知它使得哈希很难解密。
就像你一样,你可以通过这种方式使用SHA256,然后使用base64_encode()(可能没用)。