[英]Arduino Cryposuite and C programming syntax
嗨,我是C編程新手。 我試圖在將數據發送到我的應用程序之前對我的數據實現SHA1HMAC。
這是生成哈希的代碼
Serial.println("Result:");
Sha1.initHmac(hmacKey,20);
Sha1.print("Test");
printHash(Sha1.resultHmac());
Serial.println();
這是打印散列的方法。 我不明白這里正在做什么。 我想將哈希存儲在變量中,以便可以將哈希的字符串輸出與字符串中的另一個哈希進行比較
void printHash(uint8_t* hash) {
int i;
for (i=0; i<20; i++) {
Serial.print("0123456789abcdef"[hash[i]>>4]);
Serial.print("0123456789abcdef"[hash[i]&0xf]);
}
Serial.println();
}
它通過將商( >>4
)和余數( &0xF
)並將其用作十六進制字符數組( "0123456789abcdef"
)的索引,將數字簡單地轉換為其十六進制表示形式。 並針對hash
數組中的20個數字執行此操作。
您不需要將哈希存儲在變量中,因為哈希已經存儲在Sha1對象內部的變量中。 函數Sha1.resultHmac()
將返回一個指向20個元素的數組的指針:
Sha1.initHmac(hmacKey, 20);
Sha1.print("Test");
uint8_t* hash = Sha1.resultHmac(); // the variable hash[] has 20 fields, from hash[0]...hash[19]
為了稍后將哈希與第二個哈希進行比較,您可以編寫一個簡單的函數,如下所示:
int compareHash(uint8_t* hash1, uint8_t* hash2) {
int retVal = 1;
for (size_t i=0; i<20; i++) {
if(hash1[i] != hash2[i]){
retVal = 0;
break;
}
}
return retVal;
}
如果哈希不同,則返回0,如果相同則返回1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.