2014-12-19 127 views
1

我正在將.net項目轉換爲PHP。但不能轉換下面的代碼:PHP等價的.NET代碼

public static string HashString(string value) 
    { 
     SHA1 hasher = new SHA1CryptoServiceProvider(); 

     UTF8Encoding enc = new UTF8Encoding(); 

     byte[] hashInBytes = hasher.ComputeHash(enc.GetBytes(value)); 

     return Convert.ToBase64String(hashInBytes); 
    } 

到目前爲止,我已經做到了這一點,但結果不一樣:

function HashString($str) { 
    return base64_encode(sha1($str)); 
} 

請幫忙,謝謝。

+0

[C#SHA-1與PHP SHA-1 ...不同結果?]的可能重複(http://stackoverflow.com/questions/790232/c-sharp-sha-1-vs-php-sha -1不同的結果) – Raptor 2014-12-19 06:15:16

回答

1

不同之處在於,PHP使用ASCII編碼進行哈希計算。

在C#中,您可以使用ASCIIEncoding替換UTF8Encoding以獲得相同的結果。

+0

我有一個數據庫充滿了加密的密碼字段,,我想使用相同的數據庫,。 Iam使用PHP創建項目,因此它對我轉換.net代碼無用。 – 2014-12-19 06:18:56

+0

有沒有一種方法可以在php中使用utf8編碼sha1 – 2014-12-19 06:20:41

+0

密碼使用Unicode字符?這很奇怪。建議改爲改用C#中的機制。 – Raptor 2014-12-19 06:25:31

0

最後我找到了解決辦法:

這是最後的代碼,這相當於.NET代碼:

function HashString($str) { 
    return base64_encode(sha1($str,true)); 
} 

我已經加入「真」與SHA1功能。