C#SHA256 Hashing与Python结果不同

时间:2014-01-08 12:14:48

标签: c# python encryption cryptography sha256

我正在编写一个基于我发现的Python代码的小程序。我需要一些帮助。它是关于使用SHA256加密的值。

python代码如下:

first = hashlib.sha256((valueOne + valueTwo).encode()).hexdigest()
second = hashlib.sha256(str(timestamp) + value).encode()).hexdigest()

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

first: 93046e57a3c183186e9e24ebfda7ca04e7eb4d8119060a8a39b48014d4c5172b
second: bde1c946749f6716fde713d46363d90846a841ad56a4cf7eaccbb33aa1eb1b70

我的C#代码是:

string first = sha256_hash((secret + auth_token));
string second = sha256_hash((timestamp.ToString() + secret));

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

first: 9346e57a3c183186e9e24ebfda7ca4e7eb4d81196a8a39b48014d4c5172b   
second: bde1c946749f6716fde713d46363d9846a841ad56a4cf7eaccbb33aa1eb1b70

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

我的sha256_hash方法来自此处:Obtain SHA-256 string of a string

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

1 个答案:

答案 0 :(得分:4)

你的十六进制摘要方法不会产生字节长度为2的十六进制值< 16.字节\x08仅作为'8'而不是'08'添加到十六进制输出中,导致输出太短。

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

foreach (Byte b in result)
    Sb.Append(b.ToString("x2"));

有关如何将字节格式化为十六进制字符串的更多信息,请参阅Standard Numeric Format Strings