[英]Encrypt a string using openssl command line
我有一個 16 字節的字符,我想使用 openssl 將其加密為 16 字節的加密字符串。
然后需要將該加密字符串(以人類可讀格式)提供給將要使用它的用戶,並且該字符串將被解密為其原始的 16 字節形式以進行比較和驗證。 誰能告訴我 openssl 命令行是如何實現的。
這是在命令行上使用 openssl 加密字符串的一種方法(必須輸入兩次密碼):
echo -n "aaaabbbbccccdddd" | openssl enc -e -aes-256-cbc -a -salt
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
輸出如下所示:
U2FsdGVkX1/6LATntslD80T2HEIn3A0BqxarNfwbg31D2kI00dYbmBo8Mqt42PIm
編輯:據我所知,您無法控制輸出的字節數。 您可以對它進行 b64 或十六進制編碼,但僅此而已。 此外,如果您想將該字符串保存到文件而不是 stdout,請使用 -out 選項。
試試這個:
echo 'foo' | openssl aes-256-cbc -a -salt
echo 'U2FsdGVkX1/QGdl4syQE8bLFSr2HzoAlcG299U/T/Xk=' | openssl aes-256-cbc -a -d -salt
跑步
openssl list-cipher-commands
列出所有可用的密碼。
我有一個 16 字節的字符,我想使用 openssl 將其加密為 16 字節的加密字符串 [以人類可讀的格式]
我相信您正在尋找 Format Preserving Encryption。 我認為需要注意的是你必須從一個 16 字節的人類可讀字符串開始。 Phillip Rogaway 有一篇關於這些技術的論文:格式保留加密概要。 這篇論文有很多內容,在 Stack Overflow 上不能用一個段落來描述。
如果您可以從較短的字符串開始並使用諸如 OCB、OFB 或 CTR 之類的流模式,那么您可以對最終字符串進行 Base64 編碼,以便結果為 16 字節且人類可讀。 Base64 以 3 → 4 的速率擴展(3 個未編碼擴展為 4 個編碼),因此您需要一個長度為 12 個字符的較短字符串來實現 16 個人類可讀字符。
據我所知,沒有命令行工具可以在本地執行此操作。 您可以通過 AES/CTR 在命令行上使用 OpenSSL,並通過base64
命令進行管道傳輸。 以下內容接近,但它以 11 個字符(而不是 12 個)開頭:
$ echo 12345678901 | openssl enc -e -base64 -aes-128-ctr -nopad -nosalt -k secret_password
cSTzU8+UPQQwpRAq
此外,您確實需要了解 te -k
選項(以及與此相關的-K
選項),以及它如何派生密鑰,以便您可以在 OpenSSL 命令之外執行此操作(如果需要)。
試試這個
$ echo "a_byte_character" | openssl enc -base64
你有 100 多種密碼類型
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-gcm -aes-128-ofb -aes-128-xts
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ctr -aes-192-ecb
-aes-192-gcm -aes-192-ofb -aes-256-cbc
-aes-256-cfb -aes-256-cfb1 -aes-256-cfb8
-aes-256-ctr -aes-256-ecb -aes-256-gcm
-aes-256-ofb -aes-256-xts -aes128
-aes192 -aes256 -bf
-bf-cbc -bf-cfb -bf-ecb
-bf-ofb -blowfish -camellia-128-cbc
-camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8
-camellia-128-ecb -camellia-128-ofb -camellia-192-cbc
-camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8
-camellia-192-ecb -camellia-192-ofb -camellia-256-cbc
-camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8
-camellia-256-ecb -camellia-256-ofb -camellia128
-camellia192 -camellia256 -cast
-cast-cbc -cast5-cbc -cast5-cfb
-cast5-ecb -cast5-ofb -des
-des-cbc -des-cfb -des-cfb1
-des-cfb8 -des-ecb -des-ede
-des-ede-cbc -des-ede-cfb -des-ede-ofb
-des-ede3 -des-ede3-cbc -des-ede3-cfb
-des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ofb
-des-ofb -des3 -desx
-desx-cbc -id-aes128-GCM -id-aes192-GCM
-id-aes256-GCM -rc2 -rc2-40-cbc
-rc2-64-cbc -rc2-cbc -rc2-cfb
-rc2-ecb -rc2-ofb -rc4
-rc4-40 -rc4-hmac-md5 -seed
-seed-cbc -seed-cfb -seed-ecb
-seed-ofb
我在使用 echo 和 -n 時遇到了問題。 這對我有用:
加密:
echo "PLAINTEXT_STRING" | openssl enc -aes256 -pbkdf2 -base64
系統會提示您提供解密密碼。
解密:
echo "ENCRYPTED_STRING" | openssl aes-256-cbc -d -pbkdf2 -a
輸入解密密碼進行解密。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.