对称加密类
在对称加密算法中常用的算法有: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项目代码
Java版本-JNI
Go语言版本-CGO
GmSSL Go APIhttp://gmssl.org/docs/go-api.htmlhttp://gmssl.org/docs/go-api.html
PHP版本-PHP扩展模块
中华人民共和国密码行业标准(GM/T)文本
在线生成sm2公钥私钥:
SM2 密钥在线生成工具https://const.net.cn/tool/sm2/genkey/https://const.net.cn/tool/sm2/genkey/
在线加密链接:
标签:加密,填充,知识,加解密,GmSSL,算法,guanzhi,秘钥 From: https://blog.csdn.net/hicode0101/article/details/145291649