我正在为我的考试开发hmac-sha1类。当我必须像https://en.wikipedia.org/wiki/Hash-based_message_authentication_code中描述的那样两次应用sha-1时,我遇到了一个问题。
当我对一个字符串应用sha1时,它返回给我一个unsigned int[5]并计算出哈希值。我想把unsigned int[5]转换成char[40]。
例如unsigned int H[5] = { 67452301, EFCDAB89, 98BADCFE, 10325476, C3D2E1F0 };
// char [40] will be "67452301EFCDAB8998BADCFE10325476C3D2E1F0"
所以,我可以将它连接到ipad,然后计算他的哈希值ipad_hash最后计算opad+ipad_hash连接两个字符串
正确吗?
我使用arduino uno,所以"unsigned int"是"unsigned long"。
这是我的测试代码(它是一个混乱,但我会清理它):http://pastebin.com/jfwBxAp1
你可以做
char hash_cstr[41];
sprintf(hash_cstr, "%08lX%08lX%08lX%08lX%08lX", H[0], H[1], H[2], H[3], H[4])
确保分配至少41个字符(40个用于代码,1个用于NULL终止符)。
在格式字符串%08X中,08表示使用0填充到8个字符,因此您可以获得中间字节的前导0,而X表示使用大写字符的十六进制格式。您可以使用小写x表示小写字符。十六进制格式自动假定为无符号。对于64位类型,可以使用lX