繁体   English   中英

SHA1 C#结果与Python 3不同

[英]SHA1 C# result different from Python 3

我在C#上有以下代码:

public static string GenerateSecureHash(string data) {
    HashAlgorithm algorithm = SHA1.Create();
    byte[] hash = algorithm.ComputeHash(Encoding.UTF8.GetBytes(data)); 
    StringBuilder sb = new StringBuilder();
    foreach (byte b in hash) 
        sb.Append(b.ToString("x2"));

    return sb.ToString(); 
}

给定一个data字符串,它将生成一个SHA1字符串。 我尝试使用以下代码将其转换为Python3:

def GenerateSecureHash(data: str):
    print('Generate Secure Hash called!')

    enc = str.encode('utf-8') # encode in utf8
    hash = sha1(enc)
    formatted = hash.hexdigest()

    return formatted

但是它们给出了不同的输出。

例如,如果我输入“ testStringHere”,则输出如下:

C#: 9ae24d80c345695120ff1cf9a474e36f15eb71c9
Python: 226cf119b78825f1720cf2ca485c2d85113d68c6

谁能指出我正确的方向? 谢谢。

问题在这里,

enc = str.encode('utf-8')

通过这样做,您实际上是使用默认编码'utf-8'对字符串“ utf-8 ”进行编码(而不是'“” testStringHere “字符串)。

>>> str.encode("utf-8")
b'utf-8'

请参阅str.encode的文档

>>> help(str.encode)
Help on method_descriptor:

encode(self, /, encoding='utf-8', errors='strict')
    Encode the string using the codec registered for encoding.

    encoding
      The encoding in which to encode the string.
    errors
      The error handling scheme to use for encoding errors.
      The default is 'strict' meaning that encoding errors raise a
      UnicodeEncodeError.  Other possible values are 'ignore', 'replace' and
      'xmlcharrefreplace' as well as any other name registered with
      codecs.register_error that can handle UnicodeEncodeErrors.

您可以通过以下方式进行编码

enc = str.encode("testStringHere", 'utf-8') # encode in utf8

要么

enc = "testStringHere".encode('utf-8') # encode in utf8

演示:

>>> from hashlib import sha1
>>> enc = str.encode("testStringHere", 'utf-8')
>>> enc1 = "testStringHere".encode('utf-8')
>>> sha1(enc).hexdigest() == sha1(enc1).hexdigest()
True

我怀疑问题是您将字节转换回字符串的方式。

也许尝试这样的答案: https : //stackoverflow.com/a/1003289/813503

string result = System.Text.Encoding.UTF8.GetString(byteArray);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM