SHA1 HMAC一个字节数组与Arduino
问题描述:
我怎样才能在Arduino上HMAC一个字节数组?我发现SHA1 HMAC的this library,但它似乎只用于字符串。SHA1 HMAC一个字节数组与Arduino
我已经将它传递给以空字节结尾的字节数组中的字节。这确实给了我正确的结果。但对于包含零的字节数组并不适用!
uint8_t hmacKey1[]={ 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0xde, 0xad, 0xbe, 0xef };
uint8_t time[]={ 0xb2, 0x00 };
Sha1.initHmac(hmacKey1, 10);
Sha1.print((char*)time);
要么我需要找到另一个另一个库(crypto-arduino-library看起来很有希望,但不包括我在做什么任何的例子),或劈了Cathedrow库做什么我之后。
有没有人知道另一种方式?
答
加入我自己的方法似乎做的伎俩:
void Sha1Class::writebytes(const uint8_t* data, int length) {
for (int i=0; i<length; i++)
{
write(data[i]);
}
}
答
如果你不想改变sha1.cpp你可以循环,并打印每个单字节,关键是要使用Sha1.print((char) basestring[i]);
,像这样:
#include <avr/pgmspace.h>
#include <sha1.h>
char key[] = "testKey";
uint8_t basestring[] = { 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67 }; // testing
void printHash(uint8_t* hash) {
for (int i=0; i<20; i++) {
Serial.print("abcdef"[hash[i]>>4]);
Serial.print("abcdef"[hash[i]&0xf]);
}
Serial.println();
}
void setup() {
Serial.begin(115200);
Serial.print("Input: ");
for (int i=0; i<sizeof(basestring); i++) {
Serial.print((char) basestring[i]);
}
Serial.println();
Serial.print("Key: ");
Serial.println(key);
Serial.print("Hmac-sha1 (hex): ");
Sha1.initHmac((uint8_t*)key, strlen(key));
for (int i=0; i<sizeof(basestring); i++) {
Sha1.print((char) basestring[i]);
}
uint8_t *hash;
hash = Sha1.resultHmac();
printHash(hash);
}
void loop() { }
输出
Input: testing
Key: testKey
Hmac-sha1 (hex): 60d41271d43b875b791e2d54c34bf3f018a29763
我IRC基类“Print”提供了这样的方法。否则只是使用循环和'打印::写' – leppie 2012-01-07 08:17:50
@leppie是的,循环做了我的技巧thx – russau 2012-01-07 08:56:02
很高兴我可以帮助:)未经编码的Arduino年龄。 – leppie 2012-01-07 09:18:22