賞金將在 6 天后到期。此問題的答案有資格獲得 50聲望賞金。 Anand正在從有信譽的來源尋找答案:
尋找使用帶密碼的 pdkdf2 加密和解密檔案的方法。
嘗試使用 openssl 加密檔案并使其可執行。找到了一個有趣的 鏈接,該鏈接適合我的一個問題。這是“我必須在 openssl 命令中傳遞用于加密的密碼”,這會導致錯誤。
創建 撰寫您的腳本 (script-base.sh)
#!/bin/sh
echo "Hello World"
加密你的腳本(提供密碼):foobar是我的密碼
openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc
撰寫 de Wrapper (script-final.sh):
#!/bin/sh
openssl enc -d -aes-256-cbc -a -in script-enc | sh -passin pass:foobar
運行“script-final.sh”我在控制臺中看到以下錯誤
輸入 aes-256-cbc 解密密碼:讀取錯誤密碼
盡管以下代碼有效,但已棄用
openssl enc -d -aes-256-cbc -a -in script-enc -k foobar | sh -
使用時會拋出以下錯誤
*** 警告:使用了已棄用的密鑰派生。使用 -iter 或 -pbkdf2 會更好。壞解密
uj5u.com熱心網友回復:
...有效,但 [] 已棄用:
openssl enc -d -aes-256-cbc -a -in script-enc -k foobar | sh -
在這種情況下,您將-k foobar作為openssl enc -d命令的選項提供,因此它被用作解密的密碼,因為您實際上使用foobar密碼(以及相同的密碼和默認 KDF)進行了加密,所以它成功了。有關棄用,請參見下文。
openssl enc -d -aes-256-cbc -a -in script-enc | sh -passin pass:foobar【給出】
輸入aes-256-cbc解密密碼:讀取密碼錯誤
在這里,您沒有將其-passin pass:foobar作為選項提供給openssl,而是將其作為選項提供給作為管道的第二個組件的shell 。由于您沒有將密碼作為引數提供給openssl并且它是必需的,因此 openssl 提示您輸入它,但您沒有提供有效輸入(可能輸入 control-D 或類似的),因此它失敗了。如果你這樣做了
openssl enc -d -aes-256-cbc -a -in script-enc -passin pass:foobar | sh
它將與版本完全相同-k,除了在腳本中占用更多空間。
確實,長期使用(并且仍然默認)的密鑰派生openssl enc非常差和弱,并且幾十年來一直受到廣泛批評;OpenSSL 1.1.1(2018 年發布,在您鏈接到的答案日期之后)及更高版本最終提供了一種更好的方法,-pbkdf2并警告使用舊方法。但是,您應該注意加密方面的警告,而不是解密;一旦你用糟糕的方法加密,你必須用它來解密(并遭受警告)。另請注意,正如我在該鏈接中評論的那樣,OpenSSL 1.1.x(和 3.0)與早期版本不兼容,因此如果您或任何人(如您的用戶,如果有的話)希望它運行的任何系統都在運行舊軟體它會失敗。
或者,考慮使用一開始就設計得當的東西,例如 Gilles 在同一個問題的回答中推薦的 GPG(遠在一年前)。盡管 GPG(取決于版本)使得在命令列上提供密碼變得不太方便,因為這通常會導致密碼被泄露——但在您的情況下,您自己已經在泄露密碼,因此 GPG 為您提供安全性的嘗試是浪費的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/464143.html
