sha256错误的哈希在contiki os

时间:2015-04-30 16:58:51

标签: c sha256 contiki

我在网上找到了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");
}

我已经尝试将格式ouptut更改为%x,但它没有帮助。 我认为它与little-endian和big-endian(endianness)问题有关。

1 个答案:

答案 0 :(得分:3)

您正在使用的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 <stdint.h>获取typedef uint32_t的正确平台独立Content