【问题标题】:Generated SHA256 value is different from the expected SHA256 value生成的 SHA256 值与预期的 SHA256 值不同
【发布时间】:2020-06-26 03:15:32
【问题描述】:

要执行以下步骤:

  1. 对 ASCII 值进行 base64 解码。
  2. “啁啾”附加解码值。
  3. 在“chirp”上生成 sha256
    #!/bin/sh
    a=$(echo MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgADAoR0WUZBTAkZv0Syvt+g5wGpb/HYHh22zAxCNP+ryTQ=|base64 -d)
    b="chirp$a"
    echo $b
    echo -n $b | sha256sum

我得到的值是: f62e19108cfb5a91434f1bba9f5384f9039857743aa2c0707efaa092791e4420

但期望值为: 6a29cb4....

我错过了什么吗?

【问题讨论】:

  • 您确定您正确地按照说明进行操作吗?我会将 appending 解释为添加一些东西作为后缀,这意味着 b=${a}chirp
  • @lab9 我编辑了我的帖子。我的意思是添加“啁啾”作为前缀。
  • 请注意,您使用了“bash”标签,但您的程序是标准的 Bourne shell 脚本。 @lab9 的答案是正确的,但基于 bash。你必须改变你的第一行。

标签: bash encryption cryptography sha


【解决方案1】:

对于二进制数据,作为您处理的 base64 解码数据,我不会过多依赖 echo,而只是通过管道传输这些内容,如下所示:

<<<'MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgADAoR0WUZBTAkZv0Syvt+g5wGpb/HYHh22zAxCNP+ryTQ=' base64 -d | cat <(echo -n chirp) - | sha256sum

这给了我你期望的结果,6a29cb438954e8c78241d786af874b1c7218490d3024345f6e11932377a932b6
在这里,cat 获取两个文件描述符作为参数,第一个流式传输单词“chirp”,第二个转发上一个命令的标准输出 (base64 -d)

【讨论】:

  • 实际问题是base64解码提供的NUL字符(\0)。 NUL 字符在 C 程序(如 Bourne shell)中被理解为字符串终止符,不应在字符串变量或程序参数中使用。 (echo -n chirp; base64 -d) &lt;&lt;&lt; '...base64.string...' | sha256sum BTW 可能更清楚。
  • 我也必须在这个 c 代码中实现。目前,我能够正确转换为 base64。但是要在解码后的值上生成 sha256,我们使用来自link 的 hmac_sha256()。 hmac_sha256() 也有一个关键参数。如何使用此函数生成 SHA256。谢谢
猜你喜欢
  • 2016-02-19
  • 2019-03-03
  • 2021-07-23
  • 2019-03-09
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多