这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » STM32硬件Hash-SHA1计算

共3条 1/1 1 跳转至

STM32硬件Hash-SHA1计算

助工
2025-04-19 11:22:42     打赏

1、简介

Hash函数也称哈希函数/散列函数、杂凑函数,是一个从消息空间到像空间的不可逆映射,可将“任意”长度的输入经过变换以后得到固定长度的输出。它是一种单向密码体制,即只有加密过程,不存在解密过程。Hash函数的单向性和输出长度固定的特征使其可生成消息的“数字指纹”(Digital Fingerprint),也称消息摘要(MD,Message Digest)或哈希值/散列值(Hash Value),主要应用于消息认证、数字签名、口令的安全传输与存储、文件完整性校验等方面。以下使用STM32内置硬件Hash完成SHA1计算,开发板为STM32U5-Nucleo

2、cubemx设置

ML}ZHS(4(`FF_H4M)]F2WT1.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、运行结果

OZB$RR])F[5AB`{%YP02P5C.png





关键词: SHA1计算    

专家
2025-04-19 17:43:02     打赏
2楼

感谢分享


专家
2025-04-19 17:44:00     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]