当前位置: 首页 > news >正文

SHA256 安全散列算法加速器实验

1、SHA256 介绍

SHA256 加速器是用来计算 SHA-256 的计算单元, SHA256 SHA-2 下细分出的一种算法。
SHA-2 名称来自于安全散列算法 2 (英语: Secure Hash Algorithm 2 )的缩写,一种密码散列函
数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院( NIST )在 2001 年发布。
属于 SHA 算法之一,是 SHA-1 的后继者。其下又可再分为六个不同的算法标准,包括了:
SHA-224 SHA-256 SHA-384 SHA-512 SHA-512/224 SHA-512/256 。这些变体除了生成摘要的长度、循环运行的次数等一些细微差异之外,基本结构是一致的。
简单来说,对于任何长度的消息, SHA256 都会产生一个 256bit 长的哈希值
Kendryte K210 内置 SHA256 (安全散列算法加速器)功能包括:
1. 支持 SHA-256 的计算
2. 支持输入数据的 DMA 传输
Kendryte K210 官方 SDK 提供了 3 个操作 PWM 的函数,这些函数介绍如下:
sha256_init 函数:
该函数主要用于初始化 SHA256 加速器外设,该函数原型及参数描述如下所示:
void sha256_init(sha256_context_t *context, size_t input_len);
typedef struct _sha256_context
{size_t total_len;size_t buffer_len;union{uint32_t words[16];uint8_t bytes[64];} buffer;
} sha256_context_t;
sha256_update 函数:
该函数用于传入一个数据块参与 SHA256 Hash 计算,如下代码所示:
void sha256_update(sha256_context_t *context, const void *input, size_t
input_len);
该函数有三个参数,第一个参数为输入 SHA256 上下文对象,第二个参数为待加入计算的
SHA256 计算的数据块,第三个参数为对应数据块的长度。
sha256_final 函数:
该函数用于结束对数据的 SHA256 Hash 计算,如下代码所示:
void sha256_final(sha256_context_t *context, uint8_t *output);
函数共有两个参数,第一个参数为输入 SHA256 上下文对象,第二个参数为存放 SHA256 计算的结果的 buffer ,需保证传入这个 buffer 的大小为 32Bytes 以上。
sha256_hard_calculate 函数:
该函数用于一次性对连续的数据计算它的 SHA256 Hash ,如下代码所示:
void sha256_hard_calculate(const uint8_t *input, size_t input_len, uint8_t
*output);
该函数有三个参数,第一、第二参数用于输入待 SHA256 计算的数据和数据的长度,第三
个参数为存放 SHA256 计算的结果的 buffer ,需保证传入这个 buffer 的大小为 32Bytes 以上。

2、源码案例

main.c 如下所示:
uint8_t hash[SHA256_HASH_LEN];
uint8_t compare1[] = {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41,
0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10,
0xff, 0x61, 0xf2, 0x00, 0x15, 0xad};
uint8_t compare2[] = {0x58, 0xbe, 0xb6, 0xbb, 0x9b, 0x80, 0xb2, 0x12, 0xc3, 0xdb,
0xc1, 0xc1, 0x02, 0x0c, 0x69, 0x6f,0xbf, 0xa3, 0xaa, 0xd8, 0xe8, 0xa4, 0xef, 0x4d, 0x38, 0x5e,
0x9b, 0x07, 0x32, 0xfc, 0x5d, 0x98};
uint8_t compare3[] = {0x6e, 0x65, 0xda, 0xd1, 0x7a, 0xa2, 0x3e, 0x72, 0x79, 0x8d,
0x50, 0x33, 0xa1, 0xae, 0xe5, 0x9e,0xe3, 0x35, 0x2d, 0x3c, 0x49, 0x6c, 0x18, 0xfb, 0x71, 0xe3,
0xa5, 0x37, 0x22, 0x11, 0xfc, 0x6c};
uint8_t compare4[] = {0xcd, 0xc7, 0x6e, 0x5c, 0x99, 0x14, 0xfb, 0x92, 0x81, 0xa1,
0xc7, 0xe2, 0x84, 0xd7, 0x3e, 0x67,0xf1, 0x80, 0x9a, 0x48, 0xa4, 0x97, 0x20, 0x0e, 0x04, 0x6d,
0x39, 0xcc, 0xc7, 0x11, 0x2c, 0xd0};
uint8_t data_buf[1000*1000];
int main(void)
{uint64_t cycle;uint8_t total_check_tag = 0;uint32_t i;printf("\n");cycle = read_cycle();sha256_hard_calculate((uint8_t *)"abc", 3, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare1[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_hard_calculate((uint8_t
*)"abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij", 60, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare2[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_hard_calculate((uint8_t
*)"abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefgha", 65, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare3[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");memset(data_buf, 'a', sizeof(data_buf));sha256_hard_calculate(data_buf, sizeof(data_buf), hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare4[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_context_t context;sha256_init(&context, sizeof(data_buf));sha256_update(&context, data_buf, 1111);sha256_update(&context, data_buf + 1111, sizeof(data_buf) - 1111);sha256_final(&context, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare4[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");cycle = read_cycle() - cycle;if (total_check_tag == 1)printf("\nSHA256_TEST _TEST_FAIL_\n");elseprintf("\nSHA256_TEST _TEST_PASS_\n");printf("\nsha256 test time = %ld ms\n",
cycle/(sysctl_clock_get_freq(SYSCTL_CLOCK_CPU)/1000));while(1);return 0;
}
        可以看到,mian 函数首先计算‘ abc ’的哈希值,并将计算的值通过串口打印输出,接着
计算字符串“ abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij ”的哈希值,然后同样
将计算的值打印出来,然后计算字符串“ abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabc
defghabcdefgha ”的哈希值并打印输出,接着计算多个字符‘ a ’和分块计算多个字符‘ a ’的哈
希值,然后通过串口打印输出。
        至此,该函数总共输出 5 个不同的消息经过 SHA256 算法计算后得到的、各为 32 字节长度
的哈希值。

相关文章:

SHA256 安全散列算法加速器实验

1、SHA256 介绍 SHA256 加速器是用来计算 SHA-256 的计算单元&#xff0c; SHA256 是 SHA-2 下细分出的一种算法。 SHA-2 名称来自于安全散列算法 2 &#xff08;英语&#xff1a; Secure Hash Algorithm 2 &#xff09;的缩写&#xff0c;一种密码散列函 数算法标准…...

Elasticsearch-ES查询单字段去重

ES 语句 整体数据 GET wkl_test/_search {"query": {"match_all": {}} }结果&#xff1a; {"took" : 123,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0…...

【Apache Doris】周FAQ集锦:第 7 期

【Apache Doris】周FAQ集锦&#xff1a;第 7 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…...

EE trade:炒伦敦金的注意事项及交易指南

在贵金属市场中&#xff0c;伦敦金因其高流动性和全球认可度&#xff0c;成为广大投资者的首选。然而&#xff0c;在炒伦敦金的过程中&#xff0c;投资者需要注意一些关键点。南华金业小编带您一起来看看。 国际黄金报价 一般国际黄金报价会提供三个价格&#xff1a; 买价(B…...

JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码

JAVA医院绩效考核系统源码 功能特点&#xff1a;大型医院绩效考核系统源码 医院绩效管理系统主要用于对科室和岗位的工作量、工作质量、服务质量进行全面考核&#xff0c;并对科室绩效工资和岗位绩效工资进行核算的系统。医院绩效管理系统开发主要用到的管理工具有RBRVS、DRGS…...

Python神经影像数据的处理和分析库之nipy使用详解

概要 神经影像学(Neuroimaging)是神经科学中一个重要的分支,主要研究通过影像技术获取和分析大脑结构和功能的信息。nipy(Neuroimaging in Python)是一个强大的 Python 库,专门用于神经影像数据的处理和分析。nipy 提供了一系列工具和方法,帮助研究人员高效地处理神经影…...

非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作

MongoDB 简介 MongoDB是一个开源的面向文档的NoSQL数据库&#xff0c;它采用了分布式文件存储的数据结构&#xff0c;是当前非常流行的数据库之一。 以下是MongoDB的主要特点和优势&#xff1a; 面向文档的存储&#xff1a; MongoDB是一个面向文档的数据库管理系统&#xff0…...

使用Redis优化Java应用的性能

使用Redis优化Java应用的性能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨如何使用Redis优化Java应用的性能。Redis是一种开源的内存数据结构…...

基于Python的数据可视化大屏的设计与实现

基于Python的数据可视化大屏的设计与实现 Design and Implementation of Python-based Data Visualization Dashboard 完整下载链接:基于Python的数据可视化大屏的设计与实现 文章目录 基于Python的数据可视化大屏的设计与实现摘要第一章 导论1.1 研究背景1.2 研究目的1.3 研…...

什么是N卡和A卡?有什么区别?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是N卡和A卡&#xff1f;有什么区别&#xff1f;…...

四边形不等式优化

四边形不等式优化 应用于类似以下dp转移方程。 f i min ⁡ 1 ≤ j ≤ i ( w i , j , f i ) f_{i}\min_{1\le j\le i}(w_{i,j},f_{i}) fi​1≤j≤imin​(wi,j​,fi​) 假设 w i , j w_{i,j} wi,j​ 可以在 O ( 1 ) O(1) O(1) 的时间内进行计算。 在正常情况下&#xff0c;…...

这家民营银行起诉担保公司?暴露担保增信兜底隐患

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 助贷领域中&#xff0c;各路资方依赖担保增信业务扩张数年&#xff0c;其风险积压也不容忽视。一旦助贷平台或担保公司兜不住底&#xff0c;资方就将陷入被动。 最近&#xff0c;一则民营银行起诉合作担保公司的消息引…...

vscode禅模式怎么退出

1、如何进入禅模式&#xff1a;查看--外观--禅模式 2、退出禅模式 按二次ESC&#xff0c;就可以退出。...

Java23种设计模式(四)

1、备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象&#xff0c;备忘录模式属于行为型模式。 备忘录模式允许在不破坏封装性的前提下&#xff0c;捕获和恢复对象的内部状态。 实现方式 创建备忘录…...

HTML静态网页成品作业(HTML+CSS)——故宫介绍网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…...

Zookeeper:客户端命令行操作

文章目录 一、help二、ls path三、create四、get path五、set六、stat七、delete八、deleteall 一、help 显示所有操作命令。 二、ls path 使用ls命令来查看当前znode的子节点[可监听] w&#xff1a;监听子节点变化。s&#xff1a;附加次级信息。 三、create 普通创建&am…...

区块链技术介绍和用法

区块链技术是一种分布式账本技术&#xff0c;可以记录和存储一系列交易信息&#xff0c;并通过密码学算法保证信息的安全性和不可篡改性。区块链技术的核心概念是“区块”和“链”。 每个区块包含了一部分交易信息&#xff0c;以及一个指向上一个区块的哈希值。当新的交易发生…...

Upload-Labs-Linux1 使用 一句话木马

解题步骤&#xff1a; 1.新建一个php文件&#xff0c;编写内容&#xff1a; <?php eval($_REQUEST[123]) ?> 2.将编写好的php文件上传&#xff0c;但是发现被阻止&#xff0c;网站只能上传图片文件。 3.解决方法&#xff1a; 将php文件改为图片文件&#xff08;例…...

从 Hadoop 迁移,无需淘汰和替换

我们仍然惊讶于有如此多的客户来找我们&#xff0c;希望从HDFS迁移到现代对象存储&#xff0c;如MinIO。我们现在以为每个人都已经完成了过渡&#xff0c;但每周&#xff0c;我们都会与一个决定进行过渡的主要、高技术性组织交谈。 很多时候&#xff0c;在这些讨论中&#xff…...

深度学习:从理论到应用的全面解析

引言 深度学习作为人工智能&#xff08;AI&#xff09;的核心技术之一&#xff0c;在过去的十年中取得了显著的进展&#xff0c;并在许多领域中展示了其强大的应用潜力。本文将从理论基础出发&#xff0c;探讨深度学习的最新进展及其在各领域的应用&#xff0c;旨在为读者提供全…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...