首页 > 编程语言 >加解密算法-知识体系

加解密算法-知识体系

时间:2025-01-23 23:27:36浏览次数:3  
标签:加密 填充 知识 加解密 GmSSL 算法 guanzhi 秘钥

对称加密类

在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

DES(Data Encryption Standard 数据加密标准)

DES(Data Encryption Standard)数据加密标准,速度较快,适用于加密大量数据的场合。

AES(Advanced Encryption Standard 高级加密标准)

AES是下一代的加密算法标准,速度快,安全级别高,支持128、192、256位密钥的加密。

ECB ( Electronic Codebo Book 电码本模式)

这种模式是将整个明文分成若干段相同的小段,然后对每-小段进行加密。

ECB 其实非常简单,就是将数据按照8个字节-段进行DES加密或解密得到一段段的8个字节的密文或者明文,最后- -段

不足8个字节(- 般补0或者F),按照需求补足8个字节进行计算(并行计算),之后按照顺序将计算所得的数据连在-起即可, 各段数据

之间互不影响。

CBC (Cipher Block Chaining 密码分组链接模式)

这种模式是先将明文切分成若干小段,然后每一小段与初始块(IV) 或者上一段的密文段进行异或,再与密钥进行加密。安全性比ECB高。

OFB(Output FeedBack 输出反馈模式)

CFB(Cipher FeedBack 密码反馈模式)

CTR(Counter 计算器模式)

计算器模式不常见,在CTR模式中,有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。

这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长的情况下,密钥只能使用一次。

XTS(XEX Tweakable Block Cipher with Ciphertext Stealing)

XTS即基于XEX(XOR Encrypt XOR)的密文窃取算法的可调整的密码本模式(Tweakable Codebook mode),该算法主要用于以数据单元(包括扇区、逻辑磁盘块等)为基础结构的存储设备中静止状态数据的加密。

XTS-AES主要应用与存储产品的数据安全性。

AES-XTS MULTI-BOOSTER(AES-XTS 多重加速器)

AES-XTS多重加速器的加密引擎可轻松移植到ASIC和FPGA中,支持各种技术上的广泛应用,独特的架构可实现高度的灵活性,可根据特定应用程序所需的吞吐量和功能选择高性能的配置。

MAC(Message Authentication Code 消息认证码)

密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。安全性依赖于Hash函数,故也称带的Hash函数。消息认证码是基于和消息摘要所获得的一个值,可用于数据源发认证和完整性校验。

HMAC(Hash-based message authentication code 哈希消息认证码)

HMAC,效率高、应用广、性质好、安全性强强的一种利用Hash函数实现MAC的方案。

HMAC是Bellare等人中提出的,其要求使用的Hash函数具有迭代结构(如MD5、SHA1、SHA2等)。

GMAC(Galois message authentication code mode 伽罗瓦消息验证码)

对应到消息认证码,GMAC就是利用伽罗华域(Galois Field,GF,有限域)乘法运算来计算消息的MAC值。假设秘钥长度为128bits, 当密文大于128bits时,需要将密文按128bits进行分组。

PMAC(Parallel Message Authentication Code 并行消息身份验证码)

PMAC有别于前面的顺序的MAC方式,之前的ECBC和NMAC本质上都是线性的,但也有相同于前面的MAC方式。

ECBC-MAC、CMAC: 通常基于AES

NMAC: 一种常用的HMAC方法

PMAC: 一种并行的MAC方法

Wegman-Carter MAC:一种快速的单次MAC方法

补码种类

PKCS1Padding:

PKCS#1(v1.5)中规定当RSA的密钥长度是1024b,如果使用PKCS1Padding填充,则原文数据最多117B。如果原文不满足长度要求,则在加密前需要进行填充。

PKCS5Padding:

PKCS#5填充是将数据填充到8的倍数,填充后数据长度的计算公式是 定于元数据长度为x, 填充后的长度是 x + (8 - (x % 8)), 填充的数据是 8 - (x % 8),块大小固定为8字节。

PKCS7Padding:

假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小;PKCS5只填充到8字节,而PKCS7可以在1-255之间任意填充。

ZeroPadding:

数据长度不对齐时使用0填充,否则不填充。

NoPadding:

不填充,要求明文就是指定长度的整数倍。这种模式基本用不到,对传入明文长度要求太高。

由于使用PKCS7Padding/PKCS5Padding填充时,最后一个字节肯定为填充数据的长度,所以在解密后可以准确删除填充的数据,而使用ZeroPadding填充时,没办法区分真实数据与填充数据,所以只适合以\0结尾的字符串加解密。

为什么要补码?

某些加密算法要求明文需要按一定长度对齐,叫做块大小(BlockSize),比如16字节,那么对于一段任意的数据,加密前需要对最后一个块填充到16 字节,解密后需要删除掉填充的数据。

各种模式操作对象的对比:

各种模式优缺点对比:


非对称加密类

DSA

既 Digital Signature Algorithm,数字签名算法,他是由美国国家标准与技术研究所(NIST)与1991年提出。和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。

RSA

RSA 是一种目前应用非常广泛、历史也比较悠久的非对称秘钥加密技术,在1977年被麻省理工学院的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)三位科学家提出,由于难于破解,RSA 是目前应用最广泛的数字加密和签名技术,比如国内的支付宝就是通过RSA算法来进行签名验证。它的安全程度取决于秘钥的长度,目前主流可选秘钥长度为 1024位、2048位、4096位等,理论上秘钥越长越难于破解,按照维基百科上的说法,小于等于256位的秘钥,在一台个人电脑上花几个小时就能被破解,512位的秘钥和768位的秘钥也分别在1999年和2009年被成功破解,虽然目前还没有公开资料证实有人能够成功破解1024位的秘钥,但显然距离这个节点也并不遥远,所以目前业界推荐使用 2048 位或以上的秘钥,不过目前看 2048 位的秘钥已经足够安全了,支付宝的官方文档上推荐也是2048位,当然更长的秘钥更安全,但也意味着会产生更大的性能开销。

ECDSA

Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC(Elliptic curve cryptography,椭圆曲线密码学)和 DSA 的结合,椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障,据称256位的ECC秘钥的安全性等同于3072位的RSA秘钥,和普通DSA相比,ECDSA在计算秘钥的过程中,部分因子使用了椭圆曲线算法。

ED25519

ED25519 是一种 EdDSA 算法,是一种在扭曲爱德华兹曲线(Twisted Edwards curves)上使用 Schnorr 机制来实现的一种数字签名机制。它具有速度快,密钥较短,安全性高等优点。

Ed25519是一个数字签名算法,签名和验证的性能都极高, 一个4核2.4GHz 的 Westmere cpu,每秒可以验证 71000 个签名,安全性极高,等价于RSA约3000-bit。签名过程不依赖随机数生成器,不依赖hash函数的防碰撞性,没有时间通道攻击的问题,并且签名很小,只有64字节,公钥也很小,只有32字节。


HASH(哈希散列)类

HASH算法名称

长度

其它说明

ADLER32

4

CRC32

4

RIPEMD160

20

MD2

16

MD4

16

MD5

16

16个十六进制表示,每个2个字符,即32个字符

SHA1

20

SHA256

32

SHA384

48

SHA512

64

HAVAL256-4

32

WHIRLPOOL

64


国产密码算法

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。

SM1算法目前没有公开,只能集成在芯片中。目前应用较多的是SM2、SM3和SM4算法,这三者用法不一。

SM2属于非对称加密算法,使用公钥加密,私钥解密,在安全性和运算速度方面要优于RSA算法。

SM3属于不可逆加密算法,类似于md5,常用于签名。

SM4属于对称加密算法,可用于替代DES/AES等国际算法, SM4算法与AES算法具有相同的密钥长度和分组长度,都是128位。

GmSSL官方网址:

关于GmSSLhttp://gmssl.org/http://gmssl.org/

GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用。GmSSL项目是OpenSSL项目的分支,并与OpenSSL保持接口兼容。因此GmSSL可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力。GmSSL项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。

GmSSL项目代码

GitHub - guanzhi/GmSSL: 支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱. Contribute to guanzhi/GmSSL development by creating an account on GitHub.https://github.com/guanzhi/GmSSLhttps://github.com/guanzhi/GmSSL

Java版本-JNI

https://github.com/guanzhi/GmSSL/tree/master/javahttps://github.com/guanzhi/GmSSL/tree/master/javahttps://github.com/guanzhi/GmSSL/tree/master/java

Go语言版本-CGO

https://github.com/guanzhi/GmSSL/tree/master/gohttps://github.com/guanzhi/GmSSL/tree/master/gohttps://github.com/guanzhi/GmSSL/tree/master/go

GmSSL Go APIhttp://gmssl.org/docs/go-api.htmlhttp://gmssl.org/docs/go-api.html

PHP版本-PHP扩展模块

https://github.com/guanzhi/GmSSL/tree/master/phphttps://github.com/guanzhi/GmSSL/tree/master/phphttps://github.com/guanzhi/GmSSL/tree/master/php

中华人民共和国密码行业标准(GM/T)文本

GitHub - guanzhi/GM-Standards: 中华人民共和国密码行业标准(GM/T)文本中华人民共和国密码行业标准(GM/T)文本. Contribute to guanzhi/GM-Standards development by creating an account on GitHub.https://github.com/guanzhi/GM-Standardshttps://github.com/guanzhi/GM-Standards

在线生成sm2公钥私钥:

SM2 密钥在线生成工具https://const.net.cn/tool/sm2/genkey/https://const.net.cn/tool/sm2/genkey/

在线加密链接:

DES在线解密 DES在线加密 des hex - The X 在线工具DES 加密、解密在线工具免费。支持模式有:ECB、CBC、CTR、CFB和CFB。输出可以是BASE64、十六进制或文本。该工具检测解密结果并设置其格式,如 JSON。https://the-x.cn/cryptography/Des.aspxhttps://the-x.cn/cryptography/Des.aspx

标签:加密,填充,知识,加解密,GmSSL,算法,guanzhi,秘钥
From: https://blog.csdn.net/hicode0101/article/details/145291649

相关文章

  • 2025牛客寒假算法基础集训营1
    A乍一看,找一个数不是数组内所有数的倍数,或者因数但是换个角度想,如果这个数的因数,都没有这些数,且这个数比数组内的所有数都大那么很容易想到,1e9+7,直接输出即可B一棵树上,不重不漏地经过每一个点,那么这样一棵树必然是一条链所以只用考虑每个节点的“度”D判断数组内是否只出......
  • 分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法
    分子动力学模拟(MolecularDynamicsSimulation,简称MD)是一种基于经典力学原理的计算物理方法,用于模拟原子和分子在给定时间内的运动和相互作用‌。以下是关于分子动力学模拟的一些核心术语和概念:‌定义系统‌:在分子动力学模拟中,首先需要将研究对象抽象为由N个相互作用的粒子(如......
  • 2025牛客寒假算法基础集训营2 ptlks的题解
    A.一起奏响历史之音!题意:判断给定的音节序列是否仅由五声音调组成。思路签到题。代码点击查看代码voidsolve(){ intn,f=1; for(inti=1;i<=7;i++){ cin>>a[i]; if(a[i]==1||a[i]==2||a[i]==3||a[i]==5||a[i]==6){ }else{......
  • 埃氏算法C++实现: 快速输出质数( 素数 )
    目录1.简介算法原理算法特点应用场景2.一般求素数方法3.埃氏算法求素数3.1.无动态分配3.2.有动态分配1.简介‌埃氏算法(EratosthenesSieve)‌,全称为埃拉托斯特尼筛法,是一种由古希腊数学家埃拉托斯特尼在公元前3世纪提出的古老而经典的算法,用于计算一定范围内的素数......
  • 【Neo4j知识图谱数据库】入门
    在当今大数据和人工智能的时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文将带大家从入门到精通,了解知识图谱及其存储工具Neo4j的方方面面,包括知识图谱的介绍、Neo4j的特点、安装步骤、具体的使用方法(创建、查询),以及Cypher查询语言的详细讲解。一、知识图......
  • 代码随想录算法训练营第2天|209. 长度最小的子数组、59.螺旋矩阵II
    LeetCode2092025-01-2318:31:09星期四题目描述:力扣209文档讲解:代码随想录(programmercarl)209.长度最小的子数组视频讲解:《代码随想录》算法视频公开课:拿下滑动窗口!|LeetCode209长度最小的子数组代码随想录视频内容简记这道题目仍然是用双指针的思想,如果是暴力解法......
  • 头歌实训作业 算法设计与分析-贪心算法(第4关:让更多顾客满意)
    任务描述假设需要将一组物品分配给一组顾客,每个顾客最多只能分配一个物品。对于每个顾客i,都有一个最小需求值g[i],这是能让顾客满意的物品最小价值;对于每个物品j,都有一个对应的价值s[j]。如果s[j]>=g[i],可以将这个物品j分配给顾客i,让这位顾客i满意。如何让满意......
  • 算法笔记-N皇后求解
    n皇后问题是一个以国际象棋为背景的问题:在n×n的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,即任意两个皇后都不能处于同一条横行、纵行或斜线上。请问有多少种摆法,并将每种摆法打印出来。递归算法1(最暴力的解法)可以从左到右尝试棋子的摆放,例如先放置在......
  • Android Systrace 基础知识 - MainThread 和 RenderThread 解读
    正文这里以滑动列表为例,我们截取主线程和渲染线程一帧的工作流程(每一帧都会遵循这个流程,不过有的帧需要处理的事情多,有的帧需要处理的事情少),重点看“UIThread”和RenderThread这两行这张图对应的工作流程如下主线程处于Sleep状态,等待Vsync信号Vsync信号到来,......
  • 算法笔记-装石头(利用二进制位数)
    一、装石头(利用二进制位数)题目描述:把1000个石头装在10个袋子里面,任取其中的一袋,或把几个袋中的石头数加起来。都可以凑成1~1000中任何一种石头数量,求这10个袋子分别装了多少个石头?解法:考虑1000的二进制刚好十个位,所以按照二进制转十进制的原理,1~1000中任何一个数用10位的二进制......