2017-10-04 116 views
0

我正試圖在TI cc26xx傳感器標籤上實現SHA256。我正在使用此處提供的TI_SHA_256 API:http://www.ti.com/tool/crypto。 我的主要測試代碼如下:cc26xx上的TI sha256返回錯誤的值

... 
/* Crypto APIs Header */ 
#include "lib/TI_SHA_256.h" 
#include <stdio.h> 

uint32_t M[32] = { 0xe8 , 0x9d , 0xa1 , 0xd1 , 0xc7 , 0x4d , 0xee , 0x16 , 0x75 , 0x30 , 0x07 , 0x9a , 0x19 , 0xd1 , 0x5d , 0x76, 
        0x12 , 0x97 , 0xe4 , 0xb6 , 0xc8 , 0x03 , 0x38 , 0x1a , 0x41 , 0x6d , 0xac , 0x92 , 0xbf , 0x63 , 0x51 , 0x7a }; 
uint32_t Ha[8]; 
uint32_t *H_Array; 
volatile uint64_t L = 0x800; 

void uint32_print(char name[], uint32_t *data, int c) 
{ 
    uint32_t i; 
    if (c == 1){ 
     printf(name); 
     for(i = 0; i < 32; i++) { 
     printf("%x", data[i]); 
     } 
     printf("\r\n"); 
    } 
    else { 
     printf(name); 
     for(i = 0; i < 8; i++) { 
     printf("%x ", data[i]); 
     } 
     printf("\r\n"); 
    } 
} 

/*---------------------------------------------------------------------------*/ 
PROCESS(test_process, "Test process"); 
/*---------------------------------------------------------------------------*/ 
PROCESS_THREAD(test_process, ev, data) 
{ 
    PROCESS_BEGIN(); 

    printf("\r\n ---------------- TEST OF SHA API ------------------------ \r\n"); 
    uint32_print("Original text:", M, 1); 
    L= 0x200; 
    SHA_256(M, L, Ha, 1); 
    uint32_print("text:", M, 1); 
    uint32_print("Hashed text: ", Ha, 2); 
    printf("\r\n ---------------- \r\n"); 

    PROCESS_END(); 
} 
AUTOSTART_PROCESSES(&test_process); 

根據各種在線SHA256計算器等(http://www.fileformat.info/tool/hash.htm),校驗應該是: 73411b58707db59d6bc3cd854850eca62058d0d9f74a1ea8260d5ccdd9ac5f87

凡爲我的代碼打印如下:

---------------- TEST OF SHA API ------------------------ 
text:e89da1d1c74dee16753079a19d15d761297e4b6c83381a416dac92bf63517a 
text:e89da1d1c74dee16753079a19d15d768000000000000000000000200 
Hashed text: 91da5dd5 6cbfcca9 85fcf373 90ae73e0 9e27a4d9 c42b100c 6e746091 eda68da7 
---------------- 

我的問題是:爲什麼我的代碼返回錯誤的哈希總和?

回答

0

您的代碼計算陣列M的前半部分(0x200=512位或64字節)的SHA-256哈希,初始化爲0xe8 , 0x9d , ... , 0x76

然而,你的陣列Muint32_t類型的元素,這意味着在內存中,它看起來像這樣(假設大端架構):

000000e80000009d000000a1000000d1000000c70000004d000000ee000000160000007500000030000000070000009a00000019000000d10000005d00000076 

正如人們可以在你的網上計算器查詢,哈希這是91da5dd56cbfcca985fcf37390ae73e09e27a4d9c42b100c6e746091eda68da7。這是代碼中由SHA_256()函數計算出的正確值。

+0

謝謝你,我很欣賞這個解釋。 – kogito