常见加密算法介绍
术语
- 计算机中
密码 cipher
指一种用于加密
或者解密
的算法,密钥分为: 密钥(key)
是使用密码(cipher)
算法过程中输入的参数加密
是通过算法对数据进行编码的过程,加密的密文可以通过算法得到原始信息哈希(hash)
是通过算法将任意大小的数据映射到固定长度的过程,得到的值称为哈希值
。哈希
的目的是为了验证数据是否被篡改盐
一般是随机值,作为哈希函数的一个入参,加盐
可以使密码哈希
出唯一值明文(plaintext)
是加密之前的原始数据,密文
是通过 密码(cipher)
运算后得到的,称为 密文(ciphertext)
明文(plaintext) -<密码/cipher>-> 密文(ciphertext)
对称加密
对称密钥(Symmetric-key algorithm)
又称为共享密钥加密- 加/解密使用相同的密钥,常见算法包括:
DES(Data Encryption Standard)
AES
IDEA
RC6
CAST5
实现方式:将原始数据分隔成固定大小的块,逐个进行加密
- 特点:
- 加解密使用同一个密钥
- 效率高,适用于大量数据加密的场景
- 缺点:
- 算法公开,安全性取决于密钥大小,密钥越大,加解密效率越低
- 无法确定加密者
非对称加密
非对称密钥(public-key cryptography)
,又称为公开密钥加密,由一对密钥组成- 使用一对密钥来分别进行加密和解密
公开密钥(public key,公钥)
私有密钥(private key,私钥)
,必须保证私密性
- 特点:
- 公钥加密的数据,只有对应的私钥才能解密
- 私钥加密的数据,只有对应的公钥才能解密
- 加解密复杂,效率低,能耗高(缺点)
- 算法:
RSA(加密、数字签名)
DSA(数字签名)
ECC
Elgamal
D-H
背包算法
等
- 使用场景
- 数据加密
- 数据签名:防止明文数据被篡改
- 验证签发者,使用密钥对数据(原始数据经过 hash 算法的值)进行加密得到签名密文
- 使用者通过公钥和密文得到hash值,通过验证上述 hash 值与数据实际计算的hash是否匹配判断数据是否被篡改
- 对称密钥交换
单向散列
- 将任意数字缩小成固定大小的
指纹
,特点如下:- 任意长度输入、固定长度输出
- 不可逆的:无法从指纹生成原始数据
- 不同字符串生成的指纹不同
- 算法
md5(128bits)
sha1(160bits)
sha224
sha256
sha364
sha512
- 使用场景:保证数据的完整性
数字签名
数字签名(Digital Signature)
基于非对称加密算法,使用私钥对数据的摘要进行加密运算,生成签名。
数字签名就是用于验证传输的内容是不是真实服务器发送的数据,发送的数据有没有被篡改过,用私钥来加密,通过与之配对的公钥来解密。
- 第一步:服务端把报文经过Hash处理后生成摘要信息Digest,摘要信息使用私钥private-key加密之后就生成签名,服务器把签名连同报文一起发送给客户端。

图片转载自互联网

图片转载自互联网
数字证书
数字证书(Certificate Authority,CA)
是由权威机构颁发的、能够证明公钥持有者身份的电子文件,包含公钥信息和CA的数字签名,确保公钥是可信的。
目前数字证书的标准是 x.509,由两种格式:
如何保证现在使用的公钥就是真实服务器发给你的呢?我们就用数字证书来解决这个问题。数字证书
一般由数字证书认证机构(Certificate Authority)
颁发,证书里面包含了真实服务器的公钥和网站的一些其他信息,数字证书机构用自己的私钥加密后发给浏览器,浏览器使用数字证书机构的公钥解密后得到真实服务器的公钥。这个过程是建立在被大家所认可的证书机构之上得到的公钥,所以这是一种安全的方式。