我有一个OpenPGP消息,在文件中看起来像这样:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.9 (MingW32)
jA0EAgMCtCzaGHIQXY9g0sBnAeDOQ9GuVA/uICuP+7Z2dnjNCLgRN0J/TzJs1qcW
aJYBTkH5KQCClCxjwTYbHZCox1sENfIS+KxpCKJQqAX3SNEFm0ORNE6RNwEgb1Zj
uOdIw8auxUsjmQKFLAcZIPKjBjyJqSQVfmEoteVn1n+pwm8RdIZevCHwLF2URStB
nBVuycaxcaxcaxcxccxcxacqweqweqwe123fsMqQPaTusOBGpEQrWC9jArtvYEUpY
aNF6BfQ0y2CYrZrmzRoQnmtnVu10PagEuWmVxCucyhVwlthVgN0iBog9jhjliQkc
rrDTupqB4IimMEjElGUHtkuvrCQ0jQnOHEAJmmefMDH0NkYKGd5Ngt21I5ge5tob
/uBjHKMxjNgg1nWfg6Lz4jqoKe/EweuEeg==
=+N9N
-----END PGP MESSAGE-----
我想给了一个15个字符的密码来解密它。但是我真的不知道要使用PHP解密文件。我看一下PHP的GnuPG手册页,并在gnugpg_decrypt()
示例中给出了以下代码:
$res = gnupg_init();
gnupg_adddecryptkey($res,"8660281B6051D071D94B5B230549F9DC851566DC","test");
$plain = gnupg_decrypt($res,$encrypted_text);
echo $plain;
因此,看看这个功能gnupg_adddecryptkey
,它提到我需要一个指纹。那到底是什么 在哪里可以买到呢?
指纹是根据公钥和一些元数据(如密钥创建时间)计算出的哈希值。通过gnupg_import
asfingerprint
属性导入密钥后,也将返回它。
这是针对公用/专用密钥加密的,您似乎没有使用它:使用密码加密时,您将省略公用/专用密钥加密的部分,而对消息使用会话密钥直接使用对称加密(有时也从密码短语派生而来的密码(称为密码块或对称密钥)。
PHP的GnuPG模块不支持对称加密。没有执行对称解密的功能,并且此限制在模块的源文档中也有描述:
此类为GNU Privacy Guard(GPG)提供了一个面向对象的接口。
尽管GPG可以支持对称密钥加密,但是此类仅旨在促进公共密钥加密。
您将必须通过调用手动执行解密gpg
。一个示例命令行是
gpg --symmetric --decrypt [file]
(或者,您也可以通过STDIN提供输入)。要提交密码,请查看GnuPG的--passphrase...
选项:
--passphrase-fd n
从文件描述符n中读取密码。从文件描述符n中仅读取第一行。如果对n使用0,则将从STDIN读取密码。仅在仅提供一个密码短语的情况下才能使用此功能。
--passphrase-file file
从文件文件中读取密码。从文件file中仅读取第一行。仅在仅提供一个密码短语的情况下才能使用此功能。显然,如果其他用户可以读取该文件,则存储在文件中的密码短语的安全性值得怀疑。如果可以避免,请不要使用此选项。
--passphrase string
使用字符串作为密码。仅在仅提供一个密码短语的情况下才能使用此功能。显然,这在多用户系统上具有非常可疑的安全性。如果可以避免,请不要使用此选项。
请注意,计算机的所有其他用户都可以读取所有其他用户的命令行参数,因此对于共享主机平台尤其如此,--passphrase
这绝对是不行的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句