2017-09-28 13 views
0

これまではVB.NETで記述されていたPythonのハッシュ関数を再実装しようとしています。関数は文字列を受け取り、ハッシュを返します。ハッシュはデータベースに格納されます。同じ10個の文字列が両方の機能のための入力として使用されて e33110e0f494d2cf47700bd204e18f65a48817b9c40113771bf85cc69d04b2d8SHA256は、PythonとVB.NETで値をハッシングすると、異なるハッシュを生成する

返し

def computehash(source): 
    if source == "": 
     return "" 
    m = hashlib.sha256() 
    m.update(str(source).encode('ascii')) 
    return m.hexdigest() 

: 61ba4908431dfec539e7619d472d7910aaac83c3882a54892898cbec2bbdfa8c

私のPythonの再実装を返し

Public Function computeHash(ByVal source As String) 
      If source = "" Then 
        Return "" 
      End If 
      Dim sourceBytes = ASCIIEncoding.ASCII.GetBytes(source) 
      Dim SHA256Obj As New Security.Cryptography.SHA256CryptoServiceProvider 
      Dim byteHash = SHA256Obj.ComputeHash(sourceBytes) 
      Dim result As String = "" 
      For Each b As Byte In byteHash 
        result += b.ToString("x2") 
      Next 
      Return result 

関数が異なるハッシュを返す理由を知ることができますか?

+1

バイトを見てください。それはちょうどエンコーディングが異なっている可能性があります – Plutonix

+1

空の文字列(VB.NETコードの変更が必要)または問題を絞り込むために1バイトをハッシュすることから始めることがあります。 –

答えて

1

私はMicrosoft's exampleを使ってTIOにVisual Basic .Net実装を作成しました。機能的には実装と同等で、文字列ビルダーがVBによく慣れていないのと同じ出力を生成することを確認しました。

TIOの同様のpython 3の実装は、上記のVBの例と同じハッシュを生成します。

import hashlib 
m = hashlib.sha256() 
binSrc = "abcdefghij".encode('ascii') 
# to verify the bytes 
[print("{:2X}".format(c), end="") for c in binSrc] 
print() 
m.update(binSrc) 
print(m.hexdigest()) 

私はあなたの問題を再現できません。おそらくMinimal, Complete and verifiable exampleを作成した場合は、より多くのお手伝いをすることができます。

関連する問題