Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#SHA256哈希与Python结果不同_C#_Python_Encryption_Cryptography_Sha256 - Fatal编程技术网

C#SHA256哈希与Python结果不同

C#SHA256哈希与Python结果不同,c#,python,encryption,cryptography,sha256,C#,Python,Encryption,Cryptography,Sha256,我正在根据我找到的Python代码编写一个小程序。有几行我需要帮助。它是关于使用SHA256加密获得一个值 python代码如下所示: first = hashlib.sha256((valueOne + valueTwo).encode()).hexdigest() second = hashlib.sha256(str(timestamp) + value).encode()).hexdigest() first: 93046e57a3c183186e9e24ebfda7ca04e7eb4

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

python代码如下所示:

first = hashlib.sha256((valueOne + valueTwo).encode()).hexdigest()
second = hashlib.sha256(str(timestamp) + value).encode()).hexdigest()
first: 93046e57a3c183186e9e24ebfda7ca04e7eb4d8119060a8a39b48014d4c5172b
second: bde1c946749f6716fde713d46363d90846a841ad56a4cf7eaccbb33aa1eb1b70
当我执行它时,我的值如下:

first = hashlib.sha256((valueOne + valueTwo).encode()).hexdigest()
second = hashlib.sha256(str(timestamp) + value).encode()).hexdigest()
first: 93046e57a3c183186e9e24ebfda7ca04e7eb4d8119060a8a39b48014d4c5172b
second: bde1c946749f6716fde713d46363d90846a841ad56a4cf7eaccbb33aa1eb1b70
我的C#代码是:

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

first: 9346e57a3c183186e9e24ebfda7ca4e7eb4d81196a8a39b48014d4c5172b   
second: bde1c946749f6716fde713d46363d9846a841ad56a4cf7eaccbb33aa1eb1b70
如您所见,这些值略有不同。python代码返回两个长度均为64个字符的值,其中与C#一样,值分别为60个字符和63个字符

我的sha256_散列方法来自这里:


感谢您的帮助。

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

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

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

有关如何将字节格式化为十六进制字符串的详细信息,请参阅。

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

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

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

有关如何将字节格式化为十六进制字符串的详细信息,请参阅。

您的C#输出已删除三个
0
字符,这似乎是您如何打印数据而不是如何生成哈希摘要的问题。除了这三个缺少的
0
数字外,散列匹配。@oleksii我的第一个字符串现在是:FD72A372C9C76AB3AA28F52BA72D1E530011EFAB6116CEE9E49E414C16C638,长度为63个字符,第二个是:E5B76F416549109167188FB49DE0DB8AC2877FA0B9CBC222D998A1FF891B556A60,长度为64个字符。@MartijnPieters我的程序接着从这两个字符串中删除字符,它依赖于它们的长度为64个字符,但由于缺少一些字符,它会抛出一个错误。,虽然不是同一种编程语言。@user2764359:我已经找到了问题,请再次查看我的答案。我的分析肯定是正确的,只有
b.ToString()
调用的确切语法让我难以捉摸。您尝试过最新的编辑了吗?您的C#输出已删除三个
0
字符,这似乎是您如何打印数据而不是如何生成哈希摘要的问题。除了这三个缺少的
0
数字外,散列匹配。@oleksii我的第一个字符串现在是:FD72A372C9C76AB3AA28F52BA72D1E530011EFAB6116CEE9E49E414C16C638,长度为63个字符,第二个是:E5B76F416549109167188FB49DE0DB8AC2877FA0B9CBC222D998A1FF891B556A60,长度为64个字符。@MartijnPieters我的程序接着从这两个字符串中删除字符,它依赖于它们的长度为64个字符,但由于缺少一些字符,它会抛出一个错误。,虽然不是同一种编程语言。@user2764359:我已经找到了问题,请再次查看我的答案。我的分析肯定是正确的,只有
b.ToString()
调用的确切语法让我难以捉摸。您尝试过最新的编辑吗?这使我的第一个字符串转到:1472x42x1102x872x1632x1932x1312x242x1102x1582x62x2352x252x1672x2022x42x23122x2352x772x1292x252x62x102x1382x572x1802x1282x202x2122x1972x232x432x,我的第二个字符串转到:1892x2252x2012x702x1162x1592x1032x222x2532x2312x192x2122x992x992x2172x82x702x1682x652x1732x862x1642x2072x1262x1722x2032x1792x582x1612x2352x272x1122x@user2764359:对不起,我不是C#专家(从长远来看);我猜到了
ToString()
查找前格式化..这使我的第一个字符串转到:1472x42x1102x872x1632x1932x1312x242x1102x1582x62x2352x252x1672x2022x42x23122x2352x772x129252x62x102x1382x572xx1802x1282x202x2122x1972x232x432x,我的第二个字符串转到:1892x2252x2012x702x1162x1592x1032x222x2532x2312x192x2122x992x992x2172x82x702x1682x652x1732x862x1642x2072x1262x1722x2032x1792x582x1612x2352x272x1122x@user2764359:对不起,我不是C#专家(从长远来看);在查找之前,我猜测了
ToString()
格式。。