单向散列算法单向散列算法,又称hash哈希函数,Hash函数(也称杂凑算法)就是把任意长的输入消息串变化成固定长的输出串的一种函数,该过程是不可逆的。Hash函数可用于数字签名、消息的完整性检测、消息起源的认证检测等。较为常用的方法包括MD算法和SHA算法。
STM32的哈希模块 Hash,支持的哈希算法有:SHA-1, SHA-224, SHA-256等
集成该哈希硬件加速模块的STM32系列
SHA(Secure Hash Algorithm)安全散列算法SHA是一个密码散列函数家族,SHA算法主要分为SHA-1、SHA-2、SHA-3 三大类,
一般使用SHA-2算法,主要有SHA-256、SHA-512、SHA-224、SHA-384四种,对于嵌入式一般选择SHA256,将任意长度的输入压缩成256位,且哈希碰撞的概率近乎为0。
应用场景:数字签名、数字时间戳、数字证书。
SHA256一般嵌入式系统签名或者校验复杂版使用SHA256,也就是长度小于2^64字节的任意数据,经过哈希运算得到256比特的消息摘要。
具体HASH算法的原理太复杂了,我也看不下去了,直接看看怎么用吧
一通过CUBE生成HASH的基本工程
SHA可以选择很多类型,比如SHA1等
这里选择SHA256
其它配置都是选择之前工程的
二加密工具测试下 SHA256的结果
三下面开始自己加自己的代码
加入定义
添加测试代码
if (HAL_HASH_Start_IT(&hhash, (uint8_t*)aInput, strlen((char const*)aInput), aSHA256Digest) != HAL_OK)
{
Error_Handler();
}
while (HAL_HASH_GetState(&hhash) != HAL_HASH_STATE_READY);
/* Compare computed digest with expected one */
if(memcmp(aSHA256Digest, aExpectSHA256Digest, sizeof(aExpectSHA256Digest)/sizeof(aExpectSHA256Digest[0])) != 0)
{
Error_Handler();
}
else
{
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_4,GPIO_PIN_SET);
}
先计算再比较
查看现象,灯亮,工作正常。