【问题标题】:sha256 wrong hash in contiki oscontiki os中的sha256错误哈希
【发布时间】:2017-06-28 14:32:58
【问题描述】:

我在网上找到了 SHA256 的实现。它由单个文件sha256.c 组成,我已经在Linux 上成功测试了该功能。

这是文件的链接:http://bradconte.com/sha256_c

当我尝试在 Contiki 中使用它时,输出不正确。

这是一段代码:

unsigned char text1[]={"sallam"}, hash[32];
int idx;
SHA256_CTX ctx;
sha256_init(&ctx);
sha256_update(&ctx, text1, strlen(text1));
sha256_final(&ctx, hash);
print_hash(hash);

这是我用来打印哈希的函数:

void print_hash(unsigned char hash[])
{
    int idx;
    for (idx=0; idx < 32; idx++)
       printf("%02x",hash[idx]);
    printf("\n");
}

我已经尝试将输出格式更改为%x,但没有帮助。 我认为这与小端与大端(字节序)问题有关。

【问题讨论】:

  • 那么您的平台(contiki?)使用哪种字节序?
  • 还有Linux运行在哪个平台上,你用来测试的?
  • 我在虚拟机上使用 Instant Contiki 2.7。 ubuntu endianness 是 little endian,因为 contiki 我不知道如何检查它,请原谅我。
  • 因为知道字节序来解决你的问题是必不可少的,你最好去看看:stackoverflow.com/q/2100331/694576
  • 我认为这与字节序无关。您应该删除 big-endian 标签,Contiki 不支持 any 大端平台(不像 Linux)。

标签: c sha256 contiki


【解决方案1】:

您使用的 SHA256 库无法正确处理非 32 位平台。它在 Contiki 中失败了,因为对于 MSP430 平台,int 的大小是 16 位,而不是作者隐含假设的 32 位。

文件sha256.c中的第4行:

#define uint unsigned int // 32-bit word

应该改为:

#define uint uint32_t // 32-bit word

确保在此行之前#include &lt;stdint.h&gt; 以获取正确的平台无关typedefuint32_t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2019-08-09
    • 1970-01-01
    • 2010-11-22
    • 2017-08-07
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多