C# SHA256 散列与 Python 结果不同

use*_*359 1 c# python encryption cryptography sha256

我正在根据我找到的 Python 代码编写一个小程序。有几行我需要帮助。它是关于使用 SHA256 加密的值。

python代码如下:

first = hashlib.sha256((valueOne + valueTwo).encode()).hexdigest()
second = hashlib.sha256(str(timestamp) + value).encode()).hexdigest()
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我的值如下:

first: 93046e57a3c183186e9e24ebfda7ca04e7eb4d8119060a8a39b48014d4c5172b
second: bde1c946749f6716fde713d46363d90846a841ad56a4cf7eaccbb33aa1eb1b70
Run Code Online (Sandbox Code Playgroud)

我的 C# 代码是:

string first = sha256_hash((secret + auth_token));
string second = sha256_hash((timestamp.ToString() + secret));
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我的价值观是:

first: 9346e57a3c183186e9e24ebfda7ca4e7eb4d81196a8a39b48014d4c5172b   
second: bde1c946749f6716fde713d46363d9846a841ad56a4cf7eaccbb33aa1eb1b70
Run Code Online (Sandbox Code Playgroud)

如您所见,这些值略有不同。python 代码返回两个长度为 64 个字符的值,其中在 C# 中,值分别为 60 个字符和 63 个字符。

我的 sha256_hash 方法来自这里:获取字符串的 SHA-256 字符串

任何帮助将不胜感激,谢谢。

Mar*_*ers 5

您的十六进制摘要方法不会为小于 16 的字节生成长度为 2 的十六进制值。该字节\x08被添加到您的十六进制输出中,'8'而不是'08',导致输出太短。

调整格式以生成 0 填充的十六进制字符:

foreach (Byte b in result)
    Sb.Append(b.ToString("x2"));
Run Code Online (Sandbox Code Playgroud)

有关如何将字节格式化为十六进制字符串的更多信息,请参阅标准数字格式字符串。