我正在编写一个基于我发现的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
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:4)
你的十六进制摘要方法不会产生字节长度为2的十六进制值< 16.字节\x08
仅作为'8'
而不是'08'
添加到十六进制输出中,导致输出太短。
调整格式以生成0填充的十六进制字符:
foreach (Byte b in result)
Sb.Append(b.ToString("x2"));
有关如何将字节格式化为十六进制字符串的更多信息,请参阅Standard Numeric Format Strings。