我安装了这个SHA库:https://github.com/Cathedrow/Cryptosuite。我想在Win上安装Arduino IDE 1.6.7来实现HMAC256。 10,控制器是ATMEGA328。
我复制了他们网页上给出的示例。我还是新手,想测试一下。我在Arduino IDE中编写了这段代码。
#include "sha256.h"
void setup() {
// put your setup code here, to run once:
uint8_t *hash;
//static const char hash[450]={};
//const char *hash; hash={};
Sha256.initHmac("hash key",8); // key, and length of key in bytes
Sha256.print("This is a message to hash");
hash = Sha256.resultHmac();
//Serial.print(hash,HEX);
}
void loop() {
// put your main code here, to run repeatedly:
}
我收到了这个错误:
从'const char *'无效转换为'const uint8_t * {aka const unsigned char *}'[-fpermissive]
我不知道为什么会这样。该示例是从库站点原始采用的。你能帮忙吗?
修改 我试图更改以下行:
Sha256.initHmac((const uint8_t*)"hash key",8);
为:
Sha256.initHmac((const uint8_t*)"hash key",8);
但同样,编译失败了。它说:
Arduino:1.6.7(Windows 10),主板:“Arduino / Genuino Uno”
包含在C:\ Program Files中的文件 (86)\的Arduino \硬件\ Arduino的\ AVR \芯\阿尔杜伊诺/ arduino.h:28:0,
from C:\Users\e\Documents\Arduino\libraries\Sha\sha1_config.h:13, from C:\Users\e\Documents\Arduino\libraries\Sha\sha1.h:4, from C:\Users\e\Documents\Arduino\libraries\Sha\sha1.cpp:1:
C:\ Users \ e \ Documents \ Arduino \ libraries \ Sha \ sha1.cpp:8:25:错误: 变量'sha1InitState'必须是const才能被放入 通过'属性((progmem))'
的只读部分uint8_t sha1InitState [] PROGMEM = {
^
退出状态1编译错误。
此报告将提供更多信息“显示详细输出 在编辑期间“在文件>首选项中启用。
答案 0 :(得分:4)
initHmac
函数签名是:
void initHmac(const uint8_t* secret, int secretLength);
但你使用const char*
来保密。
<强>解决方案强>
尝试将秘密变量强制转换为const uint8_t*
(或const unsigned char*
):
Sha256.initHmac((const uint8_t*)"hash key",8);
<强>更新强>
要解决新的编译错误,只需在库源中包含const
的所有声明前添加PROGMEM
即可。对于insance:
在 Sha / sha1.cpp(第11行)
中const uint8_t sha1InitState[] PROGMEM = {
在 Sha / sha256.cpp(第6行)
中const uint32_t sha256K[] PROGMEM = {
在 Sha / sha256.cpp(第11行):
const uint8_t sha256InitState[] PROGMEM = {