2017-10-12 121 views
0

我相當肯定這應該很簡單,但不知何故,我從Google上找到了簡短的內容。使用密鑰文件進行加密,使用密碼進行解密

我正在寫一個PHP腳本來加密文件。我希望任何人都能夠使用此腳本加密文件,但在解密文件時需要密碼。

我看着GnuPG和openssl,但他們在解密時似乎也需要密鑰文件,或者在加密和解密時都需要密碼 - 除非我遺漏了某些東西。

基本上我正在處理一個存儲庫,並且項目的配置文件包含我不希望的repo未加密的敏感信息,但我希望有一個腳本,所有開發人員都可以使用它們在敏感文件提交之前輕鬆加密它們回購。

+1

是否有原因,爲什麼你不能使用密鑰(文件)來解密文件?爲什麼它必須是密碼? – martinstoeckli

+0

這是一個非常好的問題 - 我想 - 我們使用密碼管理器(Keepass)來分配密碼是多麼容易。 然而,它只是給了我一個黑客的想法...我可以使用密碼加密解密密鑰文件,並且作爲腳本的一部分,使用密碼解密密鑰文件,然後使用密鑰文件解密其他文件...我意識到這聽起來有多瘋狂,但它可能工作:o –

+0

如果您可以使用密鑰文件而不是密碼,則可以使用公鑰/私鑰對。然後您可以使用公鑰加密文件,並使用私鑰解密文件。在這種情況下,不需要將私鑰泄露給任何人,只需將公鑰交給其他開發人員即可。 – martinstoeckli

回答

-1

在martinstoeckli詢問了「爲什麼你不能使用密鑰解密文件?」這個明顯的問題後,我想我已經想到了一個黑客,但顯然它實際上廣泛使用後谷歌搜索 - 我的解決方案在這裏涉及使用密鑰對和密碼。

注:我生成的臨時文件夾中的密鑰對,否則這個密鑰對將存在於他們產生PC上的鑰匙串,我不希望這樣,所以我加--homedir /tmp/gnupg

我生成一個密碼 - 用GPG密鑰對少 - 這是我打字:
mkdir /tmp/gnupg
gpg --homedir /tmp/gnupg --full-gen-key
(1) RSA and RSA (default)
4096
0
y
mark
[email protected]
this key is used for protecting config files
o
然後導出私鑰,私鑰和ownertrust
gpg --homedir /tmp/gnupg --armor --export [email protected] > gpg_keyfile.pub
gpg --homedir /tmp/gnupg --armor --export-secret-keys [email protected] > gpg_keyfile.priv
gpg --homedir /tmp/gnupg --export-ownertrust > gpg_ownertrust.txt
rm -rf /tmp/gnupg
這足以加密和解密文件機智一旦密鑰導入到GPG的鑰匙串中,就會發送密碼。

接下來是密碼保護私鑰,所以沒有密碼,沒有人可以使用它。 gpg -c --batch --passphrase password1234 gpg_keyfile.priv
當心:GPG不會刪除原始文件,因此加密時,記得刪除原始文件,如果有必要
然後我就可以全部3個文件添加到資料庫(gpg_keyfile.pub gpg_keyfile.priv.gpg gpg_ownertrust.txt - NOT gpg_keyfile.priv!)。
1:
要在其他機器上的加密文件中導入公共文件和ownertrust
gpg --import gpg_keyfile.pub
gpg --import-ownertrust gpg_ownertrust.txt
2:使用加密的公鑰
gpg -e -r [email protected] configfile.ini
configfile.ini.gpg現在應該存在於文件,可以承諾回購

現在,當想要再次解密一個文件時,有幾個額外的環節可以跳過來確保系統不保存私鑰。
1:首先,私鑰密碼保護,因此將私鑰解密:
gpg --batch --passphrase password1234 gpg_keyfile.priv.gpg
2:然後創建一個臨時GPG目錄
mkdir /tmp/gnupg
3:導入私鑰來臨時鑰匙扣
gpg --homedir /tmp/gnupg --import gpg_keyfile.priv
4:使用臨時鑰匙扣,現在持有私鑰解密文件
gpg --homedir /tmp/gnupg configfile.ini.gpg
5:一定要立即刪除臨時鑰匙扣和私鑰
rm -rf /tmp/gnupg gpg_keyfile.priv

這對我的作品,現在我可以克隆的git分支到一個新的系統,輕鬆設置我的應用程序和解密只具有密碼我的配置文件。

0

這應該可以使用GnuPGopenssl

您需要加密(即 - 密碼保護)私鑰文件和未加密公鑰文件。任何人都可以使用公鑰進行加密,但解密需要提供密碼保護的私鑰。

唯一的技術問題是您需要將密鑰文件分發給每個人。

相關問題