2015-04-30 54 views
1

我在網上找到了一個SHA256的實現。它由一個文件sha256.c組成,我已經在Linux上成功測試了這個函數。sha256在contiki os中出錯的散列

這裏的鏈接的文件:http://bradconte.com/sha256_c

當我嘗試在半自助旅遊旅行社使用它,輸出是不正確的。

這裏是一塊代碼:

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,但它沒沒有幫助。 我認爲這與小端與大端(endianness)問題有關。

+0

那麼你的平臺(contiki?)使用哪種Endianness? – alk

+0

還有哪個平臺是Linux運行的,你用於測試? – alk

+0

我在虛擬機上使用instant contiki 2.7。 ubuntu的排序是小端,因爲contiki我不知道如何檢查它,請原諒我。 – yushaa4dz

回答

3

您正在使用的SHA256庫不能正確處理非32位平臺。它在Contiki中失敗了,因爲對於MSP430平臺,int的大小是16位,而不是作者暗示的32位。

線4文件sha256.c

#define uint unsigned int // 32-bit word 

應改爲:

#define uint uint32_t // 32-bit word 

確保#include <stdint.h>此行前得到適當的平臺無關的uint32_ttypedef