我正在 arduino 上编写一个项目,并将密码存储在 const char 数组中。这个密码是写在代码中的,我想对有权访问 .o 文件和 .hex 文件的恶意读者隐藏密码。
有谁碰巧知道如何隐藏它?
我已经尝试将其存储在 const 字节数组而不是 const char 数组中,但这似乎并不能解决我的问题......
我正在 arduino 上编写一个项目,并将密码存储在 const char 数组中。这个密码是写在代码中的,我想对有权访问 .o 文件和 .hex 文件的恶意读者隐藏密码。
有谁碰巧知道如何隐藏它?
我已经尝试将其存储在 const 字节数组而不是 const char 数组中,但这似乎并不能解决我的问题......
棘手的部分是,无论如何,由于您需要使用密码,(我假设您每次启动时都不能输入密钥)您的代码将同时包含锁和打开的钥匙它。真正的问题是这必须有多好?
如果它不必真的很好,您可以将密码异或某个值,并将其用作源中的密码。然后,当您需要使用它时,您可以通过相同的值对它进行异或运算,然后 ta-da...
如果您想要一些不那么琐碎的东西(并且 arduino 适合它),您可以使用您的私钥签署密码,并将您的公钥存储在源中。取消签名密码的算法比简单的异或复杂得多(因此更难发现。)
无论如何,任何需要使用明文密码的独立系统都是有缺陷的。
您可以将密码存储在EEPROM中,您可以使用 avrdude 或在您的代码中写入该密码。在后一种情况下,您需要在闪烁后的某个时间点向您的设备提供密码。
任何对设备有物理访问权限的人仍然可以访问密码,但不能访问只有文件.o
和.hex
文件的人。
我不确定 Arduino 引导加载程序是否允许您通过 avrdude 读取和写入 EEPROM,但如果没有,您可以编写一个初始 Arduino 草图,将密码写入 EEPROM,然后用只读取它的实际草图覆盖它。
只需散列密码并存储散列即可。比您散列用户输入密码以尝试匹配它们。
现在,如果您需要将密码存储到另一个服务,并且您不得不在他们的 API 中使用纯密码,那么您几乎没有可能的选择。