我在网上找到了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)问题有关。
答案 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
。