2017-09-28 1 views
0

이전에 VB.NET으로 작성된 파이썬에서 해시 함수를 구현하려고합니다. 이 함수는 문자열을 받아 해시를 반환합니다. 해시는 데이터베이스에 저장됩니다. 같은 열 개 문자열이 두 기능에 대한 입력으로 사용됩니다 e33110e0f494d2cf47700bd204e18f65a48817b9c40113771bf85cc69d04b2d8SHA256은 파이썬과 VB.NET에서 값을 해시하여 다른 해시를 생성합니다.

반환

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

: 61ba4908431dfec539e7619d472d7910aaac83c3882a54892898cbec2bbdfa8c

내 파이썬 재 구현을 반환

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

TIO에 Visual Basic .Net 구현을 만들 때 Microsoft's example을 사용했습니다. 기능적으로 구현과 동일하며 VB 작성자가 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을 만들었다면 더 많은 도움을 드릴 수 있습니다.

관련 문제