1、简介
Hash函数也称哈希函数/散列函数、杂凑函数,是一个从消息空间到像空间的不可逆映射,可将“任意”长度的输入经过变换以后得到固定长度的输出。它是一种单向密码体制,即只有加密过程,不存在解密过程。Hash函数的单向性和输出长度固定的特征使其可生成消息的“数字指纹”(Digital Fingerprint),也称消息摘要(MD,Message Digest)或哈希值/散列值(Hash Value),主要应用于消息认证、数字签名、口令的安全传输与存储、文件完整性校验等方面。以下使用STM32内置硬件Hash完成SHA1计算,开发板为STM32U5-Nucleo
2、cubemx设置
![1745032540695229.png ML}ZHS(4(`FF_H4M)]F2WT1.png](http://uphotos.eepw.com.cn/1709346044/pics/1745032540695229.png)
3、程序设计
创建待加密数据
#include "string.h"
#define INPUT_TAB_SIZE ((uint32_t) 4)
__ALIGN_BEGIN const uint8_t aInput[INPUT_TAB_SIZE] __ALIGN_END={0x54,0x68,0x65,0x20} ;//待加密数据
__ALIGN_BEGIN static uint8_t aSHA1Digest[20] __ALIGN_END;//存储SHA1加密结果
__ALIGN_BEGIN static uint8_t aExpectSHA1Digest[20] __ALIGN_END = {0x2F,0xF3,0x9B,0x41,0x6D,0xB7,0x03,0x8D,0x6F,0xA0,0xB0,0xB9,0x09,0xBB,0xE1,0x62,0x8E,0x89,0x8E,0x19};执行SHA1计算
/* USER CODE BEGIN 2 */
if (HAL_HASH_SHA1_Start(&hhash, (uint8_t *)aInput, INPUT_TAB_SIZE, aSHA1Digest, HAL_MAX_DELAY) != HAL_OK)
{
// Error_Handler();
}
printf("cal data:\n");
for(uint8_t i=0;i<INPUT_TAB_SIZE;i++){
printf("%02x ",aInput[i]);
}
printf("\ncal result:\n");
for(uint8_t i=0;i<sizeof(aSHA1Digest);i++){
printf("0x%02X ",aSHA1Digest[i]);
}
printf("\n");
if (memcmp(aSHA1Digest, aExpectSHA1Digest, sizeof(aExpectSHA1Digest) / sizeof(aExpectSHA1Digest[0])) == 0)
{
printf("Cal SHA1 Correct!\n");
}
else
{
printf("Cal SHA1 Wrong!\n");
}4、运行结果
![1745032926937744.png OZB$RR])F[5AB`{%YP02P5C.png](http://uphotos.eepw.com.cn/1709346044/pics/1745032926937744.png)
我要赚赏金
