2017-08-15 66 views
0

我有一個小型的C#函數,我想在Python中使用它。但我不知道如何使用hashlib來實現相同的結果。該函數接收一個字符串的返回字符串的SHA1哈希的base64編碼:將字符串轉換爲sha1中的基礎64 Python中的哈希

private string ConvertStringToHash(string word) 
{ 
    return Convert.ToBase64String(new SHA1CryptoServiceProvider().ComputeHash(new UnicodeEncoding().GetBytes(word))); 
} 

我想這對蟒蛇,但林沒有得到相同的結果:

def convert_string_to_hash(word): 
    m1 = hashlib.sha1() 
    m1.update(word) 
    res = m1.digest() 
    encoded = base64.b64encode(res) 
    return encoded 

最新最好的辦法在Python中完成同樣的事情?

+0

你可以發佈一些示例輸入詞和你的預期輸出嗎? – randomir

回答

2

在輸出中的差異可以從所用的編碼莖:

    在C#代碼
  • UnicodeEncoding編碼輸入字符串(word)爲UTF-16小端;和
  • 在Python代碼,你甚至不處理Unicode字符串(它們必須被編碼爲一些字節)

所以,僅僅編碼word作爲UTF-16 little endian散列前:

import hashlib 
import base64 

def convert_string_to_hash(word): 
    digest = hashlib.sha1(word.encode('utf-16-le')).digest() 
    return base64.b64encode(digest) 

另外,你的Python函數可以稍微縮短。

+0

非常感謝!產出現在匹配完美:) –

+0

不客氣,我很高興它適合你。 – randomir

相關問題