
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
總結
一句話:混合加密 = 安全傳輸(非對稱) + 高速加解密(對稱),是現代數據加密通信和文件加密的事實標準。