【问题标题】:C# SHA256 Hashing Different To Python ResultC# SHA256 散列与 Python 结果不同
【发布时间】:2014-01-26 12:53:56
【问题描述】:

我正在根据我找到的 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 代码返回两个长度为 64 个字符的值,其中与 C# 中的值分别为 60 个字符和 63 个字符。

我的 sha256_hash 方法来自这里:Obtain SHA-256 string of a string

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

【问题讨论】:

  • 您的 C# 输出丢失了三个 0 字符,这看起来像是您如何打印该数据而不是如何生成哈希摘要的问题。除了这三个缺少的0 数字之外,哈希值匹配。
  • @奥莱克西我的第一串现在变为:fd72a372c9c76ab3aa28f52ba722d1e530011efab6116cee9e49e414c16c638其是长63个字符,而第二个去:e5b76f4165491067188fb49de0db8ac2877fa0b9cbc222d998a1ff891b556a60其为长64个字符跨度>
  • @MartijnPieters 然后我的程序继续从这两个字符串中取出字符,它依赖于它们的长度为 64 个字符,但是由于缺少某些字符,它会引发错误。
  • Duplicate,虽然不是同一种编程语言。
  • @user2764359:我已经找到问题了,再看我的回答。我的分析当然是正确的,只是 b.ToString() 调用的确切语法让我无法理解。您是否尝试过最新的编辑?

标签: c# python encryption cryptography sha256


【解决方案1】:

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

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

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

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

【讨论】:

  • 这使我的第一串转到:1472x42x1102x872x1632x1932x1312x242x1102x1582x362x2352x2532x1672x2022x42x2312x2352x772x1292x252x62x102x1382x572x1802x1282x202x2122x1972x232x432x和我的第二串转到:1892x2252x2012x702x1162x1592x1032x222x2532x2312x192x2122x992x992x2172x82x702x1682x652x1732x862x1642x2072x1262x1722x2032x1792x582x1612x2352x272x1122x 跨度>
  • @user2764359: 抱歉,我不是 C# 专家(很可能);我在查找之前猜到了ToString() 格式..
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 2018-03-09
  • 1970-01-01
  • 2018-05-25
  • 2019-01-08
  • 2020-02-14
  • 2019-10-11
  • 1970-01-01
相关资源
最近更新 更多