2017-10-12 122 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

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

唯一的技术问题是您需要将密钥文件分发给每个人。

相关问题