华大HC32F460 HASH实验

news/2025/2/12 21:29:54/

        HASH熟悉的人可直接叫哈希算法又称散列算法,这种算法是不可逆破解的,设计思想来源于MD4,将任意长度的数据压缩映射成固定长度的数据,此数据概率极低被其他数据所碰撞,HC32F460中的HASH算法仅支持HASH256,算法步骤如下所示:

       首先填充消息使其长度恰好为一个比512的倍数仅小64位的数。填充方法是附一个1在消息后面,后接所要求的多个0,然后在其后附上64位的消息长度(填充前),使消息长度恰好是512位的整数倍。

       其次将A、B、C、D、E、F、G和H共 8个32位变量,用十六进制初始化。然后开始算法的主循环,一次处理512位消息,循环次数是消息中512位分组的数目。

       主循环一共进行64次操作,此操作称为压缩函数。每次操作都包含移位、循环移位、逻辑运算、模232加等,运算的过程见下图 32-2。最后的输出由A、B、C、D、E、F、G、H级联而成。其中Wt为由512位消息得到的第t步所用的临时值,Kt为第t步所用的常数值,t(0≤t≤63)是64步循环中的一步。

 1.实验目标

      本实验使用哈希算法,使用串口助手查看字符串“adcde”的哈希值。

2.实验准备

       硬件搭建:ZW-HC32F460-BZ标准版开发板1套

       软件搭建:MDK5.22

3.库函数说明

【HASH初始化函数】

    函数原型:void HASH_Init(void)

    输    入:无;

    输    出:无;

    功    能:初始化HASH;

    举    例:HASH_Init();

【HASH启动函数】

    函数原型:en_result_t HASH_Start(const uint8_t *pu8SrcData,

                       uint32_t u32SrcDataSize,

                       uint8_t *pu8MsgDigest,

                       uint32_t u32Timeout)

    输    入:

    pu8SrcData:指向映射源数据的指针;

    SrcDataSize:映射源数据大小;

    pu8MsgDigest:指向映射数据的指针;

    u32Timeout:超时时间;

   输    出:操作成功返回OK;

   功    能:启动HASH映射;

   举    例:HASH_Start((uint8_t *)m_su8SrcData, strlen(m_su8SrcData),m_au8HashMsgDigest, TIMEOUT_VAL);;

4.主流程图

 

5.实验过程

【第一步:新建/配置工程】

      将工程模板复制到实验目录下,将工程名改为HASH。

      勾选FWLibCfg.h配置中的CLK_EN、EFM_EN、GPIO_EN、PWC_EN、SRAM_EN、UTILITY_EN、HASH_EN选项

【第二步:初始化编程】

   1)HASH初始化函数

        在main.c文件中创建HashConfig()函数。

static void HashConfig(void){/* 1. Enable HASH peripheral clock. */PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_HASH, Enable);/* 2. Initialize HASH. */HASH_Init();}

   2)创建映射源数据和映射数据数组

        在main.c文件中创建两个数组

static uint8_t m_au8HashMsgDigest[32];const static char *m_su8SrcData = "abcde";

【第三步:获取映射后的数据】

   在主循环中,使用HASH_Start()函数获取映射后的数据。

    while (1u){/* Use HASH. */HASH_Start((uint8_t *)m_su8SrcData, strlen(m_su8SrcData), \m_au8HashMsgDigest, TIMEOUT_VAL);DDL_Printf("String \"%s\" message digest:\n", m_su8SrcData);for (uint8_t i = 0u; i < sizeof(m_au8HashMsgDigest); i++){DDL_Printf("%.2x ", m_au8HashMsgDigest[i]);}DDL_Printf("\n");/* Main loop cycle is 500ms. */Ddl_Delay1ms(500u);}

【第四步:下载验证】

   连接好硬件,编译下载运行该程序,通过查看映射后的数据。

 


http://www.ppmy.cn/news/504933.html

相关文章

CH577F-BLE Notihy

一、前言 最近玩了一下CH577的蓝牙&#xff0c;这里记录一下 二、准备 使用CH的EVT&#xff0c;从机用 BLE\Peripheral &#xff0c;主机用 BLE\Central&#xff0c;注意使用官网最新的&#xff0c;因为一直有进行更新&#xff0c;我前段时间拿的&#xff0c;使能notify是没…

74HC245的作用

74HC245的作用&#xff1a;信号功率放大。 第1脚DIR&#xff0c;为输入输出端口转换用&#xff0c;DIR“1”高电平时信号由“A”端输入“B”端输出&#xff0c;DIR“0”低电平时信号由“B”端输入“A”端输出。 第2~9脚“A”信号输入输出端&#xff0c;A1B1、、、、、、A8B8&am…

HCIA-H12-811(1-50)

1、 在VRP平台上&#xff0c;可以通过下面哪种方式访向上条历史命令&#xff1f;&#xff08; &#xff09; A、Ctr1U B、Ctr1P C、左光标 D、上光标 试题答案&#xff1a;[[D]] 试题解析&#xff1a; 在VRP系统中&#xff0c;ctrlU为自定义快捷键&#xff0c;ctrlP为显…

PCB设计系列文章-印刷电路发展历史

目录 概要 整体架构流程 技术名词解释 技术细节 小结 概要 现在&#xff0e;通信产品&#xff0e;计算机和其他几乎全部的电子产品&#xff0c;都使用了印刷电路。印刷电路技术的发展和完善&#xff0c;为改变世界面貌的发明--集成电路的问世&#xff0c;创造了条件。随着科学技…

【计算机网络自顶向下】简答题习题总结(三)

文章目录 第三章 传输层UDP用户数据报协议可靠数据传输原理面向连接传输TCP流量控制可靠数据传输机制 题目 第三章 传输层 传输层服务&#xff1a;在两个不同的主机的运行应用程序之间提供逻辑通信 在接收主机多路分解 将接收到的数据段传递给正确的套接字【多路分解】 在发送…

steam API

api文档&#xff1a; https://wiki.teamfortress.com/wiki/WebAPI/GetAppList https://developer.valvesoftware.com/wiki/Steam_Web_API#GetGlobalAchievementPercentagesForApp_.28v0001.29 https://partner.steamgames.com/doc/webapi_overview/oauth#RetrieveSteamID https…

解决安装Steam提示steam需要在线更新问题

解决安装Steam提示steam需要在线更新问题 解决方法&#xff1a; 参考&#xff1a;https://tieba.baidu.com/p/5252799864?pn1贴吧里楼主的方法&#xff0c; 该重启重启&#xff0c;再以管理员身份运行就好了&#xff0c;我也是试了3、4次才更新的。

FreeRTOS 创建任务

例子&#xff1a;创建一个任务&#xff0c;并在任务里面翻转LED 灯 1. 函数原型 BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,const char * const pcName,const uint16_t usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreat…