簡體   English   中英

Arduino Cryposuite和C編程語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM