加密算法、哈希算法及其区别+国密简介
现代加密算法是信息安全领域中常用的算法,用于保护数据的机密性和完整性。以下是一些常用的现代加密算法:
加密算法(Encryption Algorithm)
-
目标:加密算法的主要目标是保密性(Confidentiality),它用于将明文数据转换为密文数据,以确保只有授权的用户或实体可以解密和访问数据。加密算法的目标是隐藏信息内容,以便数据在传输或存储过程中不会被未经授权的人或者计算机系统所读取。
-
工作方式:加密算法使用密钥(密钥可能是对称的或非对称的)来对数据进行加密。加密后的数据可以在需要时通过解密操作还原为原始明文。
-
安全性需求:加密算法需要满足一定的安全性需求,如抵抗攻击(如密码破解、中间人攻击等)。
对称加密(Symmetric Encryption)
-
工作原理:对称加密使用相同的密钥(称为对称密钥)来加密和解密数据。加密和解密过程使用相同的密钥,因此速度通常较快。
-
应用场景:
-
保密性:对称加密主要用于确保数据的机密性。例如,将敏感文件存储在磁盘上时,可以使用对称加密来加密这些文件,以便只有授权的用户可以解密和访问它们。
-
加密通信:在加密通信中,对称加密用于加密数据传输。然而,一个挑战是如何安全地共享对称密钥,以便通信双方可以解密消息。
-
-
常见算法:
-
AES(Advanced Encryption Standard:高级加密标准):目前广泛使用的对称加密算法,支持不同的密钥长度(如AES-128、AES-256)。
-
DES(Data Encryption Standard:数据加密标准):较旧的对称加密算法,已不再被推荐使用。
-
3DES(Triple Data Encryption Standard :Triple DES):对DES的改进版本,提供更高的安全性。
-
非对称加密(Asymmetric Encryption)
-
工作原理:非对称加密使用一对密钥,公钥和私钥。公钥用于加密数据,私钥用于解密数据。加密的数据可以使用公钥加密,但只有持有相应私钥的实体才能解密它。
-
应用场景:
-
数据完整性和身份验证:非对称加密用于数字签名,以验证数据的完整性和确保发送者的身份。
-
密钥交换:非对称加密用于安全地交换对称密钥。例如,在TLS/SSL协议中,非对称加密用于安全地交换对称密钥,然后使用对称密钥进行通信。
-
安全通信:非对称加密用于安全通信协议,如SSH和PGP。
-
-
常见算法:
-
RSA(Rivest-Shamir-Adleman):用于加密和数字签名,广泛用于安全通信和身份验证。
-
DSA(Digital Signature Algorithm):主要用于数字签名。
-
ECC(Elliptic Curve Cryptography):基于椭圆曲线的算法,提供相同安全性下更短的密钥长度。
-
哈希函数(Hash Function)
-
目标:哈希函数的主要目标是数据完整性和快速数据检索。它将输入数据(明文)转换为固定长度的哈希值(散列值),该哈希值通常是一串看似随机的字符。哈希函数的目标是将输入数据映射到一个唯一的哈希值,以便快速验证数据完整性和检索数据。它通常不可逆,不能还原原始数据。
-
工作方式:哈希函数是单向的,它不可逆。给定相同的输入,哈希函数始终生成相同的哈希值。但无法通过哈希值还原出原始输入数据。
-
应用场景:哈希函数常用于密码存储、数字签名、数据完整性检查、数据结构(如哈希表)等领域。
哈希函数:哈希函数将输入数据转换为固定长度的哈希值,通常用于验证数据完整性和密码存储。常见的哈希函数包括:
-
SHA-256(Secure Hash Algorithm 256位版本):SHA-2家族的一部分,用于数字签名和数据完整性验证。
-
MD5(Message Digest 5):较旧的哈希算法,已不再被广泛用于安全目的。
-
密码学协议:密码学协议结合了不同的加密算法和安全机制,用于安全通信和身份验证。一些常见的密码学协议包括:
-
TLS/SSL(Transport Layer Security/Secure Sockets Layer):用于安全地传输数据,如HTTPS。
-
SSH(Secure Shell):用于远程访问和文件传输的安全协议。
-
IPsec(Internet Protocol Security):用于保护IP通信的协议套件。
-
-
密码学工具库:开发人员可以使用密码学工具库来实现各种加密算法和协议。常见的密码学工具库包括OpenSSL、Libsodium、Bouncy Castle等。
总结
-
加密算法用于保护数据的机密性,以确保数据在传输或存储时不被未经授权的人读取。
-
哈希函数用于验证数据完整性和快速检索数据,它通常不可逆,不能还原原始数据。
-
加密算法通常需要使用密钥来进行加密和解密操作,而哈希函数不需要密钥。
-
哈希函数的输出通常具有固定的长度,而加密算法的输出可以是不同长度的密文。
-
哈希函数的主要特征是碰撞抵抗性,即难以找到两个不同的输入产生相同的哈希值。
我国的一些加密算法
-
SM系列算法:SM代表“商密”(Chinese Commercial Cryptographic Algorithm),是中国国家密码管理局发布的一系列密码算法标准。其中包括:
-
SM2:椭圆曲线公钥密码算法,用于数字签名和密钥交换。
-
SM3:密码杂凑算法,类似于SHA-256,用于生成固定长度的哈希值。
-
SM4:分组密码算法,类似于AES,用于数据加密和解密。
-
-
ZUC:ZUC是一种流密码算法,被广泛用于无线通信领域,如3G和4G移动通信的加密。
-
SMS4:SMS4是一种分组密码算法,通常用于加密存储在智能卡中的数据。
-
LWPKI:国产密码基础设施(Lightweight Public Key Infrastructure)是一种基于SM2的公钥基础设施,用于数字证书管理和认证。
这些算法在中国的政府和商业应用中得到广泛使用,并且一些算法已经被国际标准化组织(ISO/IEC)采纳。中国还在不断发展和推广自主研发的密码技术。请注意,虽然这些算法在中国境内使用广泛,但在国际范围内仍然有一些其他常用的国际加密算法,如AES、RSA、SHA等。
这些加密算法和协议在计算机安全中发挥着关键作用,用于保护敏感数据、确保通信的隐私性和完整性。在选择加密方法时,应根据具体需求和安全要求来决定使用哪种算法。此外,由于密码学领域不断发展,保持系统和应用程序的安全性需要不断更新和改进加密方法。
思考
通过对上述内容的了解,我们可以看到SM3更像SHA256:
SM3可以被看作是类似于SHA-256(Secure Hash Algorithm 256位版本)的密码杂凑算法。它们有一些相似之处:
-
输出长度: SM3和SHA-256都生成256位(32字节)的固定长度哈希值。
-
安全性: SM3和SHA-256都被认为是强大的哈希算法,能够抵抗常见的密码学攻击,如碰撞攻击和预像攻击。
-
应用: 两者都用于验证数据的完整性,以确保数据在传输或存储过程中没有被篡改。它们还可用于数字签名、密码学协议和其他安全应用。
尽管在很多方面相似,但SM3和SHA-256是不同的算法,由不同的组织和标准制定机构定义。SM3是中国国家标准,而SHA-256是由美国国家安全局(NSA)发布的标准。
那么是不是可以认为SM3没有SHA512安全性高?
在密码学中,安全性的评估不仅取决于输出位数(比特数),还取决于算法的设计和强度。因此,不能仅根据输出位数来判断算法的相对安全性。
SHA-512比SM3的输出位数更大(512位对比256位),但这并不意味着SHA-512就比SM3安全。安全性还受到以下因素的影响:
-
算法设计: 安全哈希算法的设计包括其内部结构、轮函数、密钥扩展等方面。SHA-512和SM3都经过专业的密码学设计,但具体的设计细节可能会影响算法的强度。
-
抗碰撞性: 安全性的一个关键方面是抵抗碰撞攻击的能力,即使攻击者能够生成两个不同的输入,但它们具有相同的哈希输出。这需要算法具有足够的抗碰撞性。
-
密码分析: 安全性还取决于是否已经发现了攻击算法的有效方法。如果某个算法被发现存在弱点,那么它的安全性将受到威胁。
-
密钥长度: 在某些应用中,哈希算法可能与密钥一起使用,密钥的长度也会影响安全性。
综上所述,安全性评估是一个复杂的过程,不能简单地根据输出位数来判断。SHA-512和SM3都被认为是强大的密码杂凑算法,但具体的应用场景和威胁模型会影响选择哪种算法。在实际应用中,通常会根据具体需求和标准来选择合适的哈希算法。
相关文章:
加密算法、哈希算法及其区别+国密简介
现代加密算法是信息安全领域中常用的算法,用于保护数据的机密性和完整性。以下是一些常用的现代加密算法: 加密算法(Encryption Algorithm) 目标:加密算法的主要目标是保密性(Confidentiality)…...
LeetCode算法二叉树—222. 完全二叉树的节点个数
目录 222. 完全二叉树的节点个数 - 力扣(LeetCode) 代码: 运行结果: 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能…...
Scrapy-应对反爬虫机制
参考自https://blog.csdn.net/y472360651/article/details/130002898 记得把BanSpider改成自己的项目名,还有一个细节要改一下,把代码user换成user_agent 禁止Cookie 在Scrapy项目中的settings文件,可以发现文件中有以下代码: COOKIES_ENA…...
Direct3D字体
D3DX库提供接口ID3DXFont用于在Direct3D应用程序中绘制文本,该接口内部使用GDI(图形设备接口)来绘制文本,因此该接口在性能上略有损失,由于使用GDI所以才能够处理一些复杂的字体和格式。可以用D3DXCreateFontIndirect函数来创建一个ID3DXFont…...
麒麟软件操作系统下载
银河麒麟高级服务器操作系统V10(鲲鹏版): https://distro-images.kylinos.cn:8802/web_pungi/download/share/yYdlHoRzAre1mFPK9s3NviID4Lg5w6MW/ 银河麒麟高级服务器操作系统V10(飞腾版): https://dist…...
ARM---实现1-100求和任务
.text .globl _start_start:mov r0, #0x1mov r1, #0x1 给r1加一固定1不变mov r2, #0x64 100判断bl sumcmp r1, r2 sum:addcc r1, r1,#0x1 r1自增addcc r0, r0, r1 r0求和movcc pc,lrstop:b stop.end...
Vue+Three.js实现三维管道可视化及流动模拟续集
继上一篇文章中实现了三维管道的可视化和流动模拟,经过反馈,对大家还是有一定帮助,因此就编写了一个续集,相当于增加了一些常见的通用共性功能,主要在前面的基础上增加了以下功能:1.新增直角拐弯的管道,工业中很多管道都是横平竖直的,相当于我们装修的水管或电线等,不…...
基于Xilinx UltraScale+ MPSOC(ZU9EG/ZU15EG)的高性能PCIe数据预处理平台
PCIE707是一款基于PCIE总线架构的高性能数据预处理FMC载板,板卡具有1个FMC(HPC)接口,1路PCIe x4主机接口、1个RJ45千兆以太网口、2个QSFP 40G光纤接口。板卡采用Xilinx的高性能UltraScale MPSOC系列FPGA作为实时处理器,…...
IMX6ULL ARM Linux开发板SD卡启动,SD卡的分区与分区格式化创建
一、确定TF卡挂载到ubuntu上的设备名称及分区情况 1. 在ubuntu不接入TF卡的情况下, 使用df -lh /dev/sd*命令查看当前"/dev/sd开头"的设备。 ##输入df -lh /dev/sd*命令,敲回车键 ~$ df -lh /dev/sd* 2.将TF卡接入到ubuntu,再次使…...
去哪里找图标?
2023年9月27日,周三下午 为了准备软件工程的期末项目,我需要找给项目找一些图标 目录 1、iconfont 2、material-design-icons 3、Font-Awesome 4、feather 5、Bootstrap 官方图标库 1、iconfont iconfont-阿里巴巴矢量图标库 这个需要注册&…...
Js数组去重都有哪些方法?
1. indexOf 定义: indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果没有找到匹配的字符串则返回 -1。注意:iindexOf() 方法区分大小写。语法: string.indexOf(searchvalue,start)//;searchvalue必需。searchvalue可选…...
Vue简单使用
1.Vue使用环境 安装nodejs,新版nodejs集成npm;使用node -v和npm -v验证是否安装成功 修改npm镜像为淘宝npm镜像,然后使用cnpm指令代替npm npm install -g cnpm --registryhttp://registry.npm.taobao.org插件安装 Vetur Vue智能提示...
2309C++nlohmann数格示例2
JSON指针和JSON补丁 该库支持JSON指针(RFC6901)来处理结构化值.而,JSONPatch(RFC6902)允许描述两个JSON值之间的差异,有效地允许Unix已知的补丁和差异操作. //一个JSON值 json j_original R"({"baz": ["one", "two", "three"]…...
企业沟通平台私有部署,让沟通更高效数据更安全
在现代企业中,高效的内部沟通对于保持团队合作、提升工作效率至关重要。而企业沟通平台私有部署则成为了越来越多企业的选择,以满足数据安全性、合规性以及定制化需求。WorkPlus 作为领先品牌,提供高质量的企业沟通平台私有部署解决方案&…...
Java流的体系结构(一)
文章目录 一、文件读写操作FileReader和FileWriter1.main()2.FileReader1.说明:2.代码案例 3.对read()操作升级:使用read的重载方法4.FileWriter的使用1.说明2.代码 4.FileReader和FileWriter综合使用 二、使用步骤1.引入库 二、测试FileInputStream和Fi…...
什么是Redux?它的核心概念有哪些?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是Redux?⭐ 它的核心概念有哪些?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发…...
细胞机器人系统中的群体智能
摘要 细胞机器人系统具有“智能”行为能力。本文分析了这种智能的含义。本文根据上述不可思议智能行为的不可预测性来定义机器人智能和机器人系统智能。对不可预测性概念的分析与(1)统计不可预测、(2)不可访问、(3&am…...
【办公自动化】用Python将PDF文件转存为图片(文末送书)
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
不容易解的题9.26
想编写这一版,是因为之前复习字符串或者双指针等其他栏目时候没有写文章,但是现在回过头来刷,所以想着写一篇,我在leetcode的收藏夹里收藏了一些我自认为需要多加练习的题目,它们并非是很难的,极不易理解的…...
易点易动固定资产管理系统:精准管理与科学采购,降本增效的利器
在现代企业管理中,固定资产的精准管理和科学采购已成为提升企业效率和降低成本的重要环节。为了满足企业管理的需求,我们自豪地介绍易点易动固定资产管理系统,这是一款功能强大的软件解决方案,旨在帮助企业实现固定资产的精准管理…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
