簡體   English   中英

使用 openssl 命令行加密字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM