// CryptoJS
CryptoJS.AES.encrypt("data","password").toString();// Web Crypto API
crypto.subtle.encrypt({name:"AES-CBC",iv:iv},key,data);// 搜索关键词
"AES","encrypt","decrypt","IV","padding";
常见模式对比:
模式
IV 需求
并行加密
安全性
备注
ECB
否
是
低
不安全,相同明文产生相同密文
CBC
是
否
中
最常用
CTR
是
是
高
流式加密
GCM
是
是
高
带认证
Python 实现 (AES-CBC):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fromCrypto.CipherimportAESfromCrypto.Util.Paddingimportpad,unpadimportbase64key=b'1234567890123456'# 16 bytes for AES-128iv=b'abcdefghijklmnop'# 加密cipher=AES.new(key,AES.MODE_CBC,iv)ciphertext=cipher.encrypt(pad(b'secret data',AES.block_size))print(base64.b64encode(ciphertext).decode())# 解密cipher=AES.new(key,AES.MODE_CBC,iv)plaintext=unpad(cipher.decrypt(ciphertext),AES.block_size)print(plaintext.decode())
DES / 3DES
特征:
DES: 56 bit 密钥,已过时
3DES: 168 bit 密钥
块大小: 64 bit
识别: 搜索 DES, TripleDES
非对称加密 (Asymmetric Encryption)
RSA
特征:
公钥加密,私钥解密
密钥长度: 1024/2048/4096 bit
慢,通常用于加密小数据(如 AES 密钥)
识别方法:
1
2
3
4
5
6
7
8
9
10
// JSEncrypt 库
varencrypt=newJSEncrypt();encrypt.setPublicKey(publicKey);varencrypted=encrypt.encrypt("data");// Web Crypto API
crypto.subtle.encrypt({name:"RSA-OAEP"},publicKey,data);// 关键词
"RSA","publicKey","privateKey","-----BEGIN PUBLIC KEY-----";
公钥格式:
1
2
3
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----