C/C++学习 -- SHA-256算法

SHA-256算法概述

SHA-256代表"Secure Hash Algorithm 256-bit",是一种安全的哈希算法,输出固定长度的256位(32字节)哈希值。SHA-256被广泛用于加密、数字签名、密码学以及区块链等领域,因为它提供了高度的安全性和抗碰撞性。

SHA-256算法特点

固定长度输出:SHA-256算法的输出是256位,无论输入的数据大小如何,始终产生相同长度的哈希值。

不可逆性:无法从SHA-256哈希值逆向还原出原始数据。

高度抗碰撞性:SHA-256算法被广泛认为是具有极高抗碰撞性的哈希算法,即使输入数据微小的变化也会导致完全不同的哈希值。

困难的碰撞攻击:要找到两个不同的输入,产生相同的SHA-256哈希值,需要极大的计算能力和时间。

SHA-256算法原理

SHA-256算法的核心原理包括以下步骤:

数据填充:将输入数据填充到满足一定长度要求的块,通常为512位。

初始哈希值:设置初始哈希值(8个32位字)。

消息分块:将填充后的数据分成若干个512位的消息块。

消息调度:对每个消息块进行消息调度,得到64个32位字。

压缩函数:将消息块与前一个哈希值一起传递给压缩函数,产生新的哈希值。

循环处理:重复4和5步骤,直到所有消息块都处理完毕。

最终哈希值:将最后得到的哈希值连接在一起,即得到SHA-256的256位哈希值。

C语言实现SHA-256算法

以下是C语言实现SHA-256算法的代码示例:

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#define ROTRIGHT(word, bits) (((word) >> (bits)) | ((word) << (32 - (bits))))
#define CH(x, y, z) (((x) & (y)) ^ (~(x) & (z)))
#define MAJ(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
#define EP0(x) (ROTRIGHT(x, 2) ^ ROTRIGHT(x, 13) ^ ROTRIGHT(x, 22))
#define EP1(x) (ROTRIGHT(x, 6) ^ ROTRIGHT(x, 11) ^ ROTRIGHT(x, 25))
#define SIG0(x) (ROTRIGHT(x, 7) ^ ROTRIGHT(x, 18) ^ ((x) >> 3))
#define SIG1(x) (ROTRIGHT(x, 17) ^ ROTRIGHT(x, 19) ^ ((x) >> 10))
// 定义SHA-256的初始哈希值
uint32_t initial_hash[] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
};
// 定义SHA-256常量K
uint32_t K[] = {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,// ...
};
// SHA-256的数据结构
typedef struct {uint8_t data[64];uint32_t datalen;uint64_t bitlen;uint32_t state[8];
} SHA256_CTX;
// 初始化SHA-256上下文
void sha256_init(SHA256_CTX *ctx);
// 更新SHA-256哈希值
void sha256_update(SHA256_CTX *ctx, const uint8_t data[], size_t len);
// 计算SHA-256哈希值
void sha256_final(SHA256_CTX *ctx, uint8_t hash[]);
int main() {SHA256_CTX ctx;uint8_t data[] = "Hello, SHA-256!";uint8_t hash[32];sha256_init(&ctx);sha256_update(&ctx, data, strlen((char *)data));sha256_final(&ctx, hash);printf("SHA-256 Hash: ");for (int i = 0; i < 32; i++) {printf("%02x", hash[i]);}printf("\n");return 0;
}

C++实现SHA-256算法

以下是C++语言实现SHA-256算法的代码示例:

#include <iostream>
#include <string>
#include <cstdint>
class SHA256 {
public:SHA256();void update(const std::string& message);std::string final();
private:uint32_t state[8];uint8_t buffer[64];uint64_t bitlen;uint32_t K[64];void transform();
};
int main() {SHA256 sha256;std::string message = "Hello, SHA-256!";sha256.update(message);std::string hash = sha256.final();std::cout << "SHA-256 Hash: " << hash << std::endl;return 0;
}

此处省略了C++实现的具体细节,但你可以轻松地找到开源的SHA-256 C++库,用于在实际项目中使用。

通过本篇文章,你应该对SHA-256算法有了更深入的了解,并能够使用C和C++编程语言实现SHA-256哈希算法来保护数据的完整性和安全性。SHA-256的强大安全性使其成为密码学和数据安全领域的不可或缺的工具。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解Python的装饰器(多层语法糖、装饰器和装饰器修复技术及递归函数)

python中的装饰器(decorator)一般采用语法糖的形式&#xff0c;是一种语法格式。比如&#xff1a;classmethod&#xff0c;staticmethod&#xff0c;property&#xff0c;xxx.setter&#xff0c;wraps()&#xff0c;func_name等都是python中的装饰器。 装饰器&#xff0c;装饰的…

pytorch_神经网络构建2(数学原理)

文章目录 深层神经网络多分类深层网络反向传播算法优化算法动量算法Adam 算法 深层神经网络 分类基础理论: 交叉熵是信息论中用来衡量两个分布相似性的一种量化方式 之前讲述二分类的loss函数时我们使用公式-(y*log(y_)(1-y)*log(1-y_)进行概率计算 y表示真实值,y_表示预测值 …

【Pinia】小菠萝详细使用说明

文章目录 1. 介绍1.1 Pinia介绍1.2 pinia的属性说明 2. 安装3. 初步使用4. store具体使用4.1 值修改4.2.1 直接修改4.2.2 通过$patch整体修改4.2.3 通过$patch函数式4.2.4 通过$state整体修改4.2.5 通过actions修改 4.2 解构store 5 actions使用6. getters使用6.1 通过this获取…

Java Collection

Collection接口常用方法 ①添加&#xff1a; ​ add(Object obj):只要是对象都可以添加 ​ addAll(Collection c)&#xff1a;添加另一个集合的元素 ②删除&#xff1a; ​ clear():清空集合元素 ​ remove(Object obj)删除某个元素对象 ​ removeAll(Collection c)&…

熔断、限流、降级 —— SpringCloud Alibaba Sentinel

Sentinel 简介 Sentinel 是阿里中间件团队开源的&#xff0c;面向分布式服务架构的高可用流量防护组件&#xff0c;主要以流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性 Sentinel 提供了两个服务组件…

【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)

一&#xff0c;VMware下载地址&#xff1a; 百度网盘链接链接&#xff1a;百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https:/…

初识jmeter及简单使用

目录 1、打开页面&#xff1a; 2、添加线程组&#xff1a; 3、线程组中设置参数&#xff1a; 4、添加请求 5、添加一个http请求后&#xff0c;设置请求内容 6、添加察看结果树 7、执行&#xff0c;查看结果 一般步骤是&#xff1a;在测试计划下面新建一个线程组&#xf…

postgresql-备份与恢复

postgresql-备份与恢复 基本概念备份类型物理备份与逻辑备份在线备份与离线备份全量备份与增量备份 备份恢复工具备份与恢复逻辑备份与还原备份单个数据库psqlpg_dumppg_store 备份整个集群 基本概念 服务器系统错误、硬件故障或者人为失误都可能导致数据的丢失或损坏。因此&am…

一文全面解读CKA认证的含金量、详细介绍!

K8s是目前最流行的开源容器编排引擎&#xff0c;在全球都得到了广泛应用&#xff0c;BAT、京东、360、华为、网易、IBM、知乎等国内外诸多知名公司都在基于K8s构建企业容器云平台&#xff0c;支撑公司业务&#xff0c;越来越多的企业也都在向K8s迁移。相信在不远的将来&#xf…

日期相关工具类

日期相关工具类 【一】介绍【1】SimpleDateFormat 为什么是线程不安全【2】解决 SimpleDateFormat 线程不安全的方法 【二】LocalDate API【三】LocalTime API【四】LocalDateTime API【五】转换关系【1】LocalDateTime 与 LocalDate 之间的转换【2】LocalDateTime 与 Date 之间…

华为云云耀云服务器L实例评测|Elasticsearch的可视化Kibana工具安装 IK分词器的安装和使用

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到各种问题&#xff0c;在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍Elasticsearch的可视化Kibana工具安装&#xff0c;以及IK分词器的安装和使用。 其他相关的Elasticsea…

电影产业的数据洞察:爬虫技术在票房分析中的应用

概述 电影产业是一个庞大而复杂的行业&#xff0c;涉及到各种各样的因素&#xff0c;如导演、演员、类型、主题、预算、宣传、口碑、评分、奖项等。这些因素都会影响电影的票房收入&#xff0c;也会反映出电影市场的动态和趋势。为了更好地了解电影产业的数据洞察&#xff0c;…

华为云云耀云服务器L实例评测|RabbitMQ的Docker版本安装 + 延迟插件安装 QQ邮箱和阿里云短信验证码的主题模式发送

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到各种问题&#xff0c;在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍RabbitMQ的Docker版本安装和配置&#xff0c;延迟插件的安装&#xff1b;结合QQ邮箱和阿里云短信验证码…

CMMI5认证哪些企业可以申请

CMMI5认证哪些企业可以申请 什么是CMMI5认证 CMMI&#xff08;Capability Maturity Model Integration&#xff09;是一种用于评估组织的软件工程能力的国际标准。CMMI模型包括5个等级&#xff0c;其中CMMI5是最高等级&#xff0c;代表组织具有达到持续优化和创新的能力。获得…

Elasticsearch:多语言语义搜索

在此示例中&#xff0c;我们将使用多语言嵌入模型 multilingual-e5-base 对混合语言文档的 toy 数据集执行搜索。 使用这个模型&#xff0c;我们可以通过两种方式进行搜索&#xff1a; 跨语言&#xff0c;例如使用德语查询来查找英语文档在非英语语言中&#xff0c;例如使用德…

【计算机网络】高级IO初步理解

文章目录 1. 什么是IO&#xff1f;什么是高效 IO? 2. IO的五种模型五种IO模型的概念理解同步IO与异步IO整体理解 3. 阻塞IO4. 非阻塞IOsetnonblock函数为什么非阻塞IO会读取错误&#xff1f;对错误码的进一步判断检测数据没有就绪时&#xff0c;返回做一些其他事情完整代码myt…

Flutter笔记 - ListTile组件及其应用

Flutter笔记 ListTile组件及其应用 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133411883 目 录 1. …

计算机毕设 大数据工作岗位数据分析与可视化 - python flask

文章目录 0 前言1 课题背景2 实现效果3 项目实现3.1 概括 3.2 Flask实现3.3 HTML页面交互及Jinja2 4 **完整代码**5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要…

R实现数据分布特征的视觉化——多笔数据之间的比较

大家好&#xff0c;我是带我去滑雪&#xff01; 如果要对两笔数据或者多笔数据的分布情况进行比较&#xff0c;Q-Q图、柱状图、星形图都是非常好的选择&#xff0c;下面开始实战。 &#xff08;1&#xff09;绘制Q-Q图 首先导入数据bankwage.csv文件&#xff0c;该数据集…

VSC-HVDC直流输电matlab仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; VSC-HVDC直流输电仿真&#xff0c;换流站采用两电平结构&#xff0c;全控型器件&#xff08;IGBT&#xff09;&#xff0c;采用双环控制&#xff0c;包括电压外环&#xff0c;电流内环&#xff0c;分为d、q两…