用于VB.NET密码哈希函数的PHP等价物

时间:2013-10-18 19:34:20

标签: php vb.net hash passwords sha256

我有以下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

3 个答案:

答案 0 :(得分:2)

google中的第一个链接:(

使用sha256

http://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()(可能没用)。