当前位置: 首页 > 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;旨在为读者提供全…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...