我需要从可变长度字符串中提取 8 字节摘要,因此我正在寻找将在 c/c++ 中实现的算法。这将是微控制器上数字签名过程的一部分,因此它必须是:
- 可以用几行代码编写,因为必须保留尽可能少的固件;
- 资源消耗低,特别是RAM(最好小于100字节);
- 足够强大,更改字符串中任意位置的单个字符都会更改整个摘要。
我查看了 crc64 等现有算法,但它们对于我的平台来说似乎太重了。
没有机会以 64 位进行安全散列。即使 160 位的 SHA-1 理论上也被认为是损坏的。如果您确实关心安全数字签名,则应该使用 SHA2-256。如果您不关心安全性,只是想要一个避免非对抗性冲突的哈希函数,只需使用以下内容即可:
constexpr uint64 P1 = 7;
constexpr uint64 P2 = 31;
uint64 hash = P1;
for (const char* p = s; *p != 0; p++) {
hash = hash * P2 + *p;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)