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

openssl+sha256开发实例(C++)

文章目录

  • 一、 sha256介绍
  • 二、sha256原理
  • 三、openssl sha256实现

一、 sha256介绍

SHA-256(Secure Hash Algorithm 256-bit)是一种哈希算法,属于 SHA-2(Secure Hash Algorithm 2)家族的一员。SHA-256 产生的哈希值是一个256位(32字节)的二进制数字,通常以64个十六进制字符的形式表示。

以下是 SHA-256 的一些关键特点和应用:

  1. 安全性: SHA-256 被广泛认为是安全的哈希算法。对于理论上的攻击者来说,找到两个不同的输入产生相同的 SHA-256 哈希值(碰撞)的难度应该是极大的。

  2. 固定输出长度: SHA-256 生成的哈希值始终是256位,不论输入的长度如何。这种固定的输出长度使其在各种应用中易于处理。

  3. 抗碰撞性: SHA-256 具有良好的抗碰撞性,即使对输入进行微小的改动,输出的哈希值也应该发生很大的变化。

  4. 广泛应用: SHA-256 在数字签名、密码学协议、区块链等许多领域得到广泛应用。在比特币和以太坊等区块链中,SHA-256 被用于生成区块的哈希值。

  5. 不可逆性: SHA-256 是一个单向哈希函数,即从哈希值不能逆向推导出原始输入。这种性质对于存储密码的安全性很重要,因为即使泄露了哈希值,攻击者也难以还原出原始密码。

  6. 快速计算: SHA-256 的计算速度通常比较快,使其适用于对大量数据进行哈希的场景。

SHA-256 不仅仅是密码学领域的重要组成部分,它还在数据完整性验证、数字证书生成、文件校验等方面得到了广泛的应用。在使用 SHA-256 或其他哈希算法时,重要的是要理解其适用范围和局限性,以及在具体场景中的正确使用方式。

二、sha256原理

SHA-256(Secure Hash Algorithm 256-bit)是一种密码哈希函数,用于产生固定长度的哈希值,通常是256位(32字节)。SHA-256 属于 SHA-2(Secure Hash Algorithm 2)家族,设计用于替代较旧的 SHA-1。

SHA-256 的原理可以概括如下:

  1. 数据填充: SHA-256 接受的输入是任意长度的二进制数据。首先,将输入数据进行填充,以确保其长度符合 SHA-256 的处理规范。填充的方法包括在数据末尾添加比特位以指示原始数据的长度。

  2. 初始常量: SHA-256 使用一组初始常量,这些常量是 SHA-256 算法中固定的初始值。

  3. 初始哈希值: SHA-256 使用一个256位的初始哈希值,这些哈希值是 SHA-256 算法中的初始状态。这个初始哈希值通常是通过对预定的常量应用某些操作而生成的。

  4. 消息分块: 输入数据被分割成若干个固定大小的块。每个块经过一系列的处理步骤。

  5. 压缩函数: SHA-256 使用一个称为压缩函数的函数对每个块进行处理。这个压缩函数涉及了位运算、逻辑运算和基本的数学运算。

  6. 迭代运算: 对每个块应用压缩函数,并将其结果与前一块的输出(或初始哈希值)结合,形成下一轮迭代的输入。

  7. 最终结果: 经过所有块的处理后,最终的输出即为 SHA-256 的哈希值。

SHA-256 的设计考虑了对碰撞性的要求,即找到两个不同的输入产生相同的哈希值的难度非常大。这是通过在设计中引入复杂的位运算和逻辑运算来实现的。

总体而言,SHA-256 是一个单向函数,即无法从哈希值逆向还原出原始数据。这使得它在密码学中有广泛的应用,包括数字签名、密码验证、数据完整性验证等。SHA-256 的安全性建立在对其算法的数学性质的困难性推断上。

三、openssl sha256实现

#include <iostream>
#include <iomanip>
#include <openssl/sha.h>std::string sha256(const std::string& input) {unsigned char hash[SHA256_DIGEST_LENGTH];SHA256_CTX sha256;SHA256_Init(&sha256);SHA256_Update(&sha256, input.c_str(), input.length());SHA256_Final(hash, &sha256);std::stringstream ss;for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hash[i]);}return ss.str();
}int main() {std::string input = "Hello, SHA-256!";std::string hashed = sha256(input);std::cout << "Input: " << input << std::endl;std::cout << "SHA-256 Hash: " << hashed << std::endl;return 0;
}

在这个示例中,sha256 函数接受一个字符串作为输入,计算其 SHA-256 散列,并返回十六进制表示的散列值。

编译时请确保正确链接 OpenSSL 库,使用的链接选项通常包括 -lssl -lcrypto

你可以使用类似以下的命令编译:

g++ -o sha256_example sha256_example.cpp -lssl -lcrypto

然后运行生成的可执行文件:

./sha256_example

输出应该会显示输入字符串的 SHA-256 散列。请注意,这里的代码简化了错误处理和其他边缘情况,真实的应用中可能需要更加健壮的实现。

相关文章:

openssl+sha256开发实例(C++)

文章目录 一、 sha256介绍二、sha256原理三、openssl sha256实现 一、 sha256介绍 SHA-256&#xff08;Secure Hash Algorithm 256-bit&#xff09;是一种哈希算法&#xff0c;属于 SHA-2&#xff08;Secure Hash Algorithm 2&#xff09;家族的一员。SHA-256 产生的哈希值是一…...

【Bug】当用opencv库的imread()函数读取图像,用matplotlib库的plt.imshow()函数显示图像时,图像色彩出现偏差问题的解决方法

一&#xff0c;问题描述 我们在利用opencv的imread读取本地图像&#xff0c;进行一系列处理&#xff0c;但是发现用matplotlib库的imshow&#xff08;&#xff09;函数显示的时候出现色彩改变&#xff0c;比如图像偏黄&#xff0c;偏红&#xff0c;偏蓝等等&#xff0c;但是对…...

通过顶顶通呼叫中心中间件玩转FreeSWITCH媒体流

怎么获取FreeSWITCH的媒体流是一个老生常谈的问题了&#xff0c;最常见的方法media_bug,我在2019年就做的FreeSWITCH对接ASR开源的例子https://gitcode.net/iyaosan/FreeSWITCH-ASR用的就是media_bug&#xff0c;对接ASR常见的方法还有通过mod_mrcp模块对接mrcp的asrserver。 …...

Maven内网开发使用离线仓库

Maven内网开发使用离线仓库 离线或者内网环境开发与外网不通&#xff0c;中央仓库连不上&#xff0c;使用 Maven 管理项目会遇到很多问题。 比如&#xff1a;依赖包缺失&#xff0c;内网的Nexus私服的包老旧&#xff0c;很久没有维护&#xff0c;项目无法运行打包&#xff0c;…...

CSS特效007:绘制3D文字,类似PS效果

css实战中&#xff0c;怎么绘制3D文字呢&#xff1f; 实际上理论很简单&#xff0c;使用text-shadow&#xff0c;根据需要调整阴影的颜色、大小、偏移量等参数&#xff0c;以达到你想要的立体效果。下面是一个简单的示例。关键点就是知道如何设置text-shadow。 效果图 源代码 …...

LLM 面试总结

溜一遍 MLStack.Cafe - Kill Your Next Machine Learning & Data Science Interview https://www.llmforce.com/llm-interview-questions MLStack.Cafe - Kill Your Next Machine Learning & Data Science Interview An interview with a language model, ChatGPT - W…...

acwing算法基础之数学知识--求小于等于n的所有质数

目录 1 基础知识2 模板3 工程化 1 基础知识 核心思想&#xff1a;把2~n中的非质数打上标记&#xff08;也即&#xff0c;筛掉&#xff09;&#xff0c;剩余的就是质数。 一般做法&#xff1a; int primes[N]; //存储所有的质数 int st[N]; //存储是否被排除 int cnt; int n;…...

安装和使用 nn-Meter

安装和使用 nn-Meter nn-Meter: Towards Accurate Latency Prediction of Deep-Learning Model Inference on Diverse Edge Devices nn-Meter&#xff1a;精准预测深度学习模型在边缘设备上的推理延迟 Li Lyna Zhang, Shihao Han, Jianyu Wei, Ningxin Zheng, Ting Cao, Yuqin…...

PHP原生类总结利用

再SPL介绍 SPL就是Standard PHP Library的缩写。据手册显示&#xff0c;SPL是用于解决典型问题(standard problems)的一组接口与类的集合。打开手册&#xff0c;正如上面的定义一样&#xff0c;有许多封装好的类。因为是要解决典型问题&#xff0c;免不了有一些处理文…...

C/C++满足条件的数累加 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C满足条件的数累加 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C满足条件的数累加 2021年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 现有n个整数&#xff0c;将其中个位数…...

zookeeper:服务器有几种状态?

四种&#xff1a; looking(选举中&#xff09;、leading(leader)、following( follower)、 observer(观察者角色&#xff09;...

大数据-之LibrA数据库系统告警处理(ALM-12040 系统熵值不足)

告警解释 每天零点系统检查熵值&#xff0c;每次检查都连续检查五次&#xff0c;首先检查是否启用并正确配置了rng-tools工具或者haveged工具&#xff0c;如果没有配置&#xff0c;则继续检查当前熵值&#xff0c;如果五次均小于500&#xff0c;则上报故障告警。 当检查到真随…...

HTML页面模拟了一个类似Excel的表格在线diy修改表格内容

html实现在线表格编辑&#xff0c;可以修改每个表格内容&#xff0c;并且可以添加行和列 这个HTML页面模拟了一个类似Excel的表格&#xff0c;可以添加和删除行和列&#xff0c;并且可以编辑每个表格的内容。通过点击按钮可以添加新的行和列&#xff0c;通过按钮可以删除最后一…...

Unity如何保存场景,如何导出工程文件/如何查看保存位置?【各版本通用】

如何保存场景&#xff1f; 在unity中CtrlS 或者File—>Save 输入你要保存的场景名【建议保存在Scenes文件夹下】 下图&#xff0c;保存场景不在Scenes文件夹下&#xff1a; 下图&#xff0c;保存在Scenes文件夹下&#xff1a; 下图&#xff0c;保存完成 如何导出工程文…...

2023年第十六届山东省职业院校技能大赛中职组“网络安全”赛项规程

第十六届山东省职业院校技能大赛 中职组“网络安全”赛项规程 一、赛项名称 赛项名称&#xff1a;网络安全 英文名称&#xff1a;Cyber Security 赛项组别&#xff1a;中职组 专业大类&#xff1a;电子与信息大类 二、竞赛目的 网络空间已经成为陆、海、空、天之后的第…...

html菜单的基本制作

前面写过一点网页菜单的博文&#xff1b;下面再复习一些技术要点&#xff1b; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.…...

Spark Job优化

1 Map端优化 1.1 Map端聚合 map-side预聚合&#xff0c;就是在每个节点本地对相同的key进行一次聚合操作&#xff0c;类似于MapReduce中的本地combiner。map-side预聚合之后&#xff0c;每个节点本地就只会有一条相同的key&#xff0c;因为多条相同的key都被聚合起来了。其他节…...

CSS花边001:无衬线字体和有衬线字体

网站中我们看到过很多字体&#xff0c;样子各有千秋。通常针对结构&#xff0c;区分为有衬字体&#xff08;serif&#xff09; 和无衬字体&#xff08;sans-serif&#xff09;。今天我们聊一下这个话题。 什么是有衬字体&#xff0c;什么是无衬字体&#xff1f; 衬线字体&…...

nodejs+vue+python+PHP+微信小程序-安卓- 基于小程序的高校后勤管理系统-计算机毕业设计

考虑到实际生活中在高校后勤管理小程序管理方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。任何系统都要遵循系统设计的基本流程&#xff0c;本系统也不例外&#xff0c;同样需要经过市场调研&#xff0c;需求分析&#xff0c;概要设计&#x…...

Leetcode153. Find Minimum in Rotated Sorted Array

旋转数组找最小值 其中数组中的值唯一 你可以顺序遍历&#xff0c;当然一般会让你用二分来搞 方法1 数组可以分成两部分&#xff0c;左边是 ≥ n u m s [ 0 ] \ge nums[0] ≥nums[0], 右边是 < n u m s [ 0 ] <nums[0] <nums[0] 换句话说就是找第一个 < n u m s…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...