加解密算法-知识体系

对称加密类

在对称加密算法中常用的算法有: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值