Debian
使用 openssl 錯誤加密/解密字元串
我需要使用 bash 腳本加密和解密密碼。為此,我正在使用
openssl
.需要解密,因為我在主機之間移動密碼。
奇怪的是,加密看起來有一個過期時間。
加密(不在 bash 腳本上):
echo P@$$word| openssl enc -aes-128-cbc -a -salt -pass pass:pass_key
解密(在 bash 腳本上):
dec_password=$(echo -n $1 | openssl enc -aes-128-cbc -a -d -salt -pass pass:pass_key)
如果我正在進行加密然後執行腳本,它會完美執行。
但是,如果我正在進行加密並在第二天執行腳本進行解密,則會失敗並出現錯誤:
error reading input file
不確定時間是否相關,但這是唯一改變的變數。
有任何想法嗎?謝謝
等待一段時間來解密密碼後出現的錯誤,並且您提到該方法似乎“有過期時間”是因為隨機生成的隨機數
salt
隨時間而變化。(例如每天都會不同)加密時,加密密碼的第一個字元是用鹽加密時使用的鹽;您應該使用相同的鹽進行解密。
請注意,如果在 MacOS/ 舊版本中嘗試不加鹽進行加密?openssl 版本你必須使用
-nosalt
關鍵字;openssl
預設情況下生成並使用鹽。因此,要在不加鹽的情況下進行加密,您需要執行以下操作:
echo P@$$word| openssl enc -aes-128-cbc -a -nosalt -pass pass:pass_key
但是,在儲存密碼時,將它們解密以與候選密碼進行比較是不好的做法;稍後用於比較您不解密它們的腳本:
比較密碼的方法是加密密碼以檢查相同的鹽(如果使用鹽),然後比較加密的字元串以查看它們是否匹配。
如果它是用於在系統之間轉發密碼而不是儲存它們,那麼使用
salt
並不是那麼重要,但請記住它有助於保持它更安全。但是,如果您對加密強度有強烈的安全需求,OpenSSL 以加密強度較弱而聞名,而 GnuPG 在加密方面比 openSSL 更強。