2013-10-18 49 views
2

我有一個用於生成存儲在內部數據庫中的密碼哈希下面的Visual Basic .NET函數:一個PHP相當於一個VB.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

回答

2

第一鏈接:(

http://www.php.net/manual/en/function.hash.php與SHA256 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= 
+0

我花*可不是鬧着玩的*與此玩弄並沒有運氣再現哈希研究對谷歌兩小時。非常感謝您的禮遇! – Voxinator

+1

幹得好IIya。你快一分鐘! –

0

如何類似的東西?

private static function hash($string) { 
    $result = ''; 
    if (substr($string, 0, 1) == '#') 
     $result = $string; 
    else { 
     $result = '#' . hash('sha256', $string); 
    } 
    return $result; 
} 

您可以只傳遞用戶提供的密碼,或者甚至已經散列的密碼,因爲它會檢測是否已經散列。當然,這假定開始與#哈希字符的密碼是不允許的(並且將被抓到之前)。在谷歌

0

哈希passowrds,我目前使用類似功能:

function hashPassword($str, $salt='786df') { 
    hash('sha512', $salt.$str.'7'); 
} 

這是(每個站點)動態鹽和固定鹽SH512(有鹽,如果$鹽爲空時,其實是一個PHP常量)。這個解決方案是非常安全的,我知道它使得哈希難以解密。

像你這樣,你可以通過這種方式使用SHA256,然後使用BASE64_ENCODE()(可能沒用)。