OpenSSL 混合加密

openssl 中文网: https://www.openssl.net.cn/
目录
- 对称加密
- 特点
- 常见算法
- 案例(使用 AES)
- 非对称加密
- 特点
- 常见算法
- 案例(使用 RSA)
- 混合加密
- 场景
- 加密(使用 AES)
- 解密
- 总结
对称加密
特点
-
加密和解密使用相同的密钥;
-
算法简单,速度快;
-
适合大文件加密;
-
安全性依赖于密钥保密性。
常见算法
-
AES(最常用);
-
DES、3DES(已过时);
-
Blowfish、ChaCha20 等。
案例(使用 AES)
测试文件
echo "这是一个机密内容,不能泄露。" > secret.txt
加密文件
执行命令后,会提示输入密码(用于派生密钥)
openssl enc -aes-256-cbc -salt -in secret.txt -out secret.txt.enc# secret.txt 需要加密的文件
# secret.txt.enc 加密生成的结果文件
解密文件
使用相同的密码解密
openssl enc -aes-256-cbc -d -in secret.txt.enc -out decrypted.txt# secret.txt.enc 已加密的文件
# decrypted.txt 解密生成的结果文件
# 查看解密后的结果文件(与我们的原文件secret.txt内容保持一致)
非对称加密
特点
- 使用一对密钥:公钥加密,私钥解密;
- 适合安全通信和密钥分发;
- 加解密速度较慢,不适合大文件;
- 常用于数字签名、身份认证、SSL/TLS。
常见算法
-
RSA(最常见);
-
EC/DSA(椭圆曲线算法);
-
Ed25519(现代高效算法)。
案例(使用 RSA)
生成密钥对
# 私钥
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048# 公钥(公钥含于私钥,因此可通过私钥得到公钥)
openssl rsa -in private.pem -pubout -out public.pem
使用公钥加密
openssl rsautl -encrypt -inkey public.pem -pubin -in secret.txt -out secret.rsa.enc
使用私钥解密
openssl rsautl -decrypt -inkey private.pem -in secret.rsa.enc -out decrypted_rsa.txt
混合加密
场景
在实际场景中,两者常结合使用(比如 HTTPS 就是这样做的):
-
用非对称加密传输对称密钥-安全传输密钥;
-
然后用对称加密大数据-快速加解密数据。
加密(使用 AES)
生成临时对称密钥(比如 256 位随机 key)
openssl rand -base64 32 > sym.key
使用对称密钥加密文件(用 AES)
openssl enc -aes-256-cbc -salt -in secret.txt -out secret.data.enc -pass file:./sym.key
使用公钥加密对称密钥
openssl rsautl -encrypt -inkey public.pem -pubin -in sym.key -out sym.key.enc
解密
解密对称密钥(使用私钥)
openssl rsautl -decrypt -inkey private.pem -in sym.key.enc -out sym.key.dec
解密数据
openssl enc -aes-256-cbc -d -in secret.data.enc -out final_output.txt -pass file:./sym.key.dec
总结
一句话:混合加密 = 安全传输(非对称) + 高速加解密(对称),是现代数据加密通信和文件加密的事实标准。