OpenSSL 不僅是 TLS/SSL 庫,其指令列工具 openssl 更是處理編碼、雜湊、加密的利器。本文整理 Base64 編解碼、SHA1/MD5 校驗、AES/Blowfish 檔案加密解密的實戰指令與參數說明。
# 編碼:二進位檔 → 文字檔
openssl base64 -in filename.bin -out filename.txt
# 解碼:文字檔 → 二進位檔
openssl base64 -d -in filename.txt -out filename.bin
# 管道用法
cat filename.bin | openssl base64 > filename.txt
cat filename.txt | openssl base64 -d > filename.bin
# SHA1(推薦,跨平台一致)
openssl sha1 filename
# SHA1(filename)= e83a42b9bc8431a6645099be50b6341a35d3dceb
# MD5(較舊,仍常用於相容性)
openssl md5 filename
# MD5(filename)= 26e9855f8ad6a5906fea121283c729c4
# SHA256(更強)
openssl sha256 filename
# 批次產生清單
openssl sha1 * > sha1sum.txt
優勢:openssl sha1 跨平台(Linux/Unix/Windows)輸出格式一致,優於 sha1sum、md5sum 等工具在不同發行版間的細微差異。
推薦算法:
aes-128-cbc:AES 128 位元 CBC 模式,強度佳、效能好。bf (Blowfish):舊版相容,現不建議新專案使用。des、rc4-40(已知弱點)。openssl enc -aes-128-cbc -in filename -out filename.aes-128-cbc
# 提示輸入加密密碼(兩次確認)
openssl enc -d -aes-128-cbc -in filename.aes-128-cbc -out filename
# 提示輸入解密密碼
# 從環境變數讀取(較安全)
export PASS=mysecret
openssl enc -aes-128-cbc -in filename -out filename.enc -pass env:PASS
openssl enc -d -aes-128-cbc -in filename.enc -out filename -pass env:PASS
# 從檔案讀取第一行
openssl enc -aes-128-cbc -in filename -out filename.enc -pass file:/path/to/pass.txt
# 產生私鑰
openssl genrsa -out private.key 2048
# 導出公鑰
openssl rsa -in private.key -pubout -out public.key
# 簽章
openssl dgst -sha256 -sign private.key -out file.sig filename
# 驗證
openssl dgst -sha256 -verify public.key -signature file.sig filename

| 參數 | 說明 |
|---|---|
| -in / -out | 輸入/輸出檔案 |
| -d | 解密模式 |
| -a | 輸出 Base64 編碼(加密時常用) |
| -pass | 密碼來源:pass:、env:、file:、fd:、stdin |
| -salt / -nosalt | 預設使用鹽值增強安全,-nosalt 關閉 |
| -md | 密鑰導出雜湊算法(預設 sha256,舊版 md5) |