打印
[STM32H5]

【STM32 Nucleo-64测评】HASH校验测试

[复制链接]
1435|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HASH校验测试

H533的数据安全外设很是丰富,今天测试一下HASH校验外设的性能。

校验模式配置为SHA-256,为测试硬件性能,同时使用mbedtls的sha-256校验算法做对比。

测试代码如下:

cubemx生成初始化程序,数据格式选择  HASH_BYTE_SWAP,校验方式为 HASH_ALGOSELECTION_SHA256

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url] HASH Initialization Function
  * @param None
  * @retval None
  */
static void MX_HASH_Init(void)
{

  /* USER CODE BEGIN HASH_Init 0 */

  /* USER CODE END HASH_Init 0 */

  /* USER CODE BEGIN HASH_Init 1 */

  /* USER CODE END HASH_Init 1 */
  hhash.Instance = HASH;
  hhash.Init.DataType = HASH_BYTE_SWAP;
  hhash.Init.Algorithm = HASH_ALGOSELECTION_SHA256;
  if (HAL_HASH_Init(&hhash) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN HASH_Init 2 */

  /* USER CODE END HASH_Init 2 */

}
测试代码:

/*******************************************************************************
* @brief  sha256_demo.
* \param[in] none
* \retval: none
*******************************************************************************/
int sha256_demo(int argc, char * argv[])
{
        uu08 * src , *out;
        uu32 clk_start;
        mbedtls_sha256_context *sha256;
       
        dbg_print("\nmbed SHA256 test :\n");
       
        // 请求内存
        src = malloc(nKB(8));
        out = calloc(1, 32);
        sha256 = malloc(sizeof(mbedtls_sha256_context));
       
        // 开始
        loop(nKB(8))
                src[index] = index;
       
        // 输入数据流,长度任意
        clk_start = bsp_cpu_clks_get();
        mbedtls_sha256_init(sha256);
        mbedtls_sha256_starts(sha256, 0); // \c 0 for SHA-256, or \c 1 for SHA-224       
        mbedtls_sha256_update(sha256, src, nKB(8));
        mbedtls_sha256_finish(sha256, out);
        mbedtls_sha256_free(sha256);
        dbg_print("MBEDTLS sha256 time: %d us\n", bsp_clks_to_us(bsp_cpu_clks_get() - clk_start));
       
        // 显示
        dbg_u8_print("out : \n", out, 32, 16);

        memset(out, 0, 32);
                loop(nKB(8))
                src[index] = index;
        clk_start = bsp_cpu_clks_get();
       
        HAL_HASH_Start(&hhash, src, nKB(8),out,100000);
        dbg_print("\nSTM32 sha256 time: %d us\n", bsp_clks_to_us(bsp_cpu_clks_get() - clk_start));
        dbg_u8_print("out : \n", out, 32, 16);
       
        // 释放内存
        free(src);
        free(out);
        free(sha256);
       
        return 0;
}
串口输入 sha256_demo 执行测试程序,测试内容为对分别使用mebedtls-sha256和stm32硬件对8KB数据计算校验码,输出校验结果和计算时间。

测试结果如下:

mbedtls 校验3260us,STM32硬件加密解密耗时153us,速度竟然有20倍之多。

下面附上测试工程
SOFTWARE.rar (8.76 MB)

使用特权

评论回复
沙发
tpgf| | 2024-9-2 17:30 | 只看该作者
理论上,不同的数据可能会产生相同的哈希值,这种现象称为“碰撞”。对于MD5算法,已经存在有效的碰撞攻击方法,因此其安全性较低

使用特权

评论回复
板凳
木木guainv| | 2024-9-14 19:40 | 只看该作者
SHA系列包括SHA-1、SHA-256、SHA-384和SHA-512等,分别生成不同长度的哈希值

使用特权

评论回复
地板
xiaoqizi| | 2024-9-15 21:32 | 只看该作者
MD5一种广泛使用的加密哈希函数,可以生成一个128位的哈希值

使用特权

评论回复
5
晓伍| | 2024-9-17 08:32 | 只看该作者
通过命令行或Powershell调用CertUtil,可以计算文件的MD2、MD4、MD5、SHA1、SHA256、SHA384和SHA512值。该工具适合高级用户和开发者使用

使用特权

评论回复
6
磨砂| | 2024-9-22 21:32 | 只看该作者
在数据库中,哈希算法用于优化数据的存储和检索速度,通过哈希表实现快速的键值对查找

使用特权

评论回复
7
wowu| | 2024-9-23 23:25 | 只看该作者
Hash校验是一种通过特定的算法对数据或文件进行运算,生成一个固定长度的字符串,这个字符串通常被称为哈希值或者hash码

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

328

帖子

2

粉丝