OpenSSL 使用指令進行 RSA 加解密
本篇文章介紹使用 openssl 使用指令進行 RSA 加解密。包含使用 PEM 和 DER 格式,以及使用 Base64 格式的方法。
加密
首先我們把明文存在檔案裡,例如 message.txt:
1 | test |
有兩種指令可以使用。
rsautl
PEM
使用公鑰來加密
1 | openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out encrypted |
將加密後的資料存成檔案 encrypted
。
可以使用不同的 padding
1 | -ssl Use SSL v2 padding |
DER
使用公鑰來加密
1 | openssl rsautl -encrypt -inkey public.der -pubin -keyform DER -in message.txt -out encrypted |
pkeyutl
這指令功能比較全面,基本用法完全一樣
PEM
1 | openssl pkeyutl -encrypt -inkey public.pem -pubin -in message.txt -out encrypted |
和 rsautl
不同的是,他可以用更多的參數。例如使用 oaep
時,rsautl
固定使用 sha1
,pkeyutl
則可以自訂其他演算法:
1 | openssl pkeyutl -in message.txt -inkey public.pem -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 |
DER
使用公鑰來加密
1 | openssl pkeyutl -encrypt -inkey public.der -pubin -keyform DER -in message.txt -out encrypted |
解密
rsautl
PEM
使用私鑰解密
1 | openssl rsautl -decrypt -inkey private.pem -in encrypted |
DER
1 | openssl rsautl -decrypt -inkey private.der -keyform DER -in encrypted |
pkeyutl
PEM
使用私鑰解密
1 | openssl pkeyutl -decrypt -inkey private.pem -in encrypted |
DER
1 | openssl pkeyutl -decrypt -inkey private.der -keyform DER -in encrypted |
使用 Base64
上面產生的密文是二進位資料,如果想轉成 Base64 可以用以下寫法:
加密
1 | openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt | openssl enc -base64 -out encrypted |
或
1 | openssl pkeyutl -encrypt -inkey public.pem -pubin -in message.txt | openssl enc -base64 -out encrypted |
解密
先將 Base64 轉成二進位資料存到暫存的 .tmp
,再進行原來的檢驗流程:
1 | openssl enc -d -base64 -in encrypted -out .tmp && openssl rsautl -decrypt -inkey private.pem -in .tmp && rm .tmp |
延伸閱讀
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 小殘的程式光廊!
Comment