2017-08-15 15 views
0

私はPythonで使用したい小さなC#関数を持っています。しかし、同じ結果を達成するためにhashlibをどのように使用するかはわかりません。私のpythonでこれを試してみましたが、同じ結果を得ていないイム文字列を基数64に変換するsha1からPythonのハッシュ

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

:関数は、文字列のANは、文字列のsha1ハッシュのBase64エンコードを返す受信

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はUTF-16リトルエンディアンとして入力文字列(word)をコードします。だから、あなたも、Unicodeの文字列を処理していない、あなたのPythonコードでと
  • 、(彼らは一部バイトとしてエンコードする必要があります)

、単にハッシュ前にUTF-16 little endianとしてwordをエンコード:

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

関連する問題