OpenSSL 混合加密

发布于:2025-06-25 ⋅ 阅读:(16) ⋅ 点赞:(0)

openssl 中文网: https://www.openssl.net.cn/



对称加密

特点

  • 加密和解密使用相同的密钥;

  • 算法简单,速度快;

  • 适合大文件加密;

  • 安全性依赖于密钥保密性。

常见算法

  • AES(最常用);

  • DES、3DES(已过时);

  • Blowfish、ChaCha20 等。

案例(使用 AES)

测试文件

echo "这是一个机密内容,不能泄露。" > secret.txt

image-20250623201012825

加密文件

执行命令后,会提示输入密码(用于派生密钥)

openssl enc -aes-256-cbc -salt -in secret.txt -out secret.txt.enc

# secret.txt 需要加密的文件
# secret.txt.enc 加密生成的结果文件

image-20250623201203034

解密文件

使用相同的密码解密

openssl enc -aes-256-cbc -d -in secret.txt.enc -out decrypted.txt

# secret.txt.enc 已加密的文件
# decrypted.txt 解密生成的结果文件
# 查看解密后的结果文件(与我们的原文件secret.txt内容保持一致)

image-20250623201317683

非对称加密

特点

  • 使用一对密钥:公钥加密,私钥解密;
  • 适合安全通信和密钥分发;
  • 加解密速度较慢,不适合大文件;
  • 常用于数字签名、身份认证、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

image-20250623201433408

使用公钥加密

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

image-20250623202222489

混合加密

场景

在实际场景中,两者常结合使用(比如 HTTPS 就是这样做的):

  1. 用非对称加密传输对称密钥-安全传输密钥;

  2. 然后用对称加密大数据-快速加解密数据。

加密(使用 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

image-20250623203043099

解密

解密对称密钥(使用私钥)

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

image-20250623203452148

总结

一句话:混合加密 = 安全传输(非对称) + 高速加解密(对称),是现代数据加密通信和文件加密的事实标准。


网站公告

今日签到

点亮在社区的每一天
去签到