Python

您所在的位置:网站首页 python中加密 Python

Python

2023-03-19 13:46| 来源: 网络整理| 查看: 265

我试图在Python 3.6中使用python-gnupg和一个客户提供的公钥来加密一个文本文件,他们有一个私钥来解密它。我没有获得该密钥的权限。尽管 python-gnupg出现 to successfully encrypt the file (though with some confusing errors 出现 in the log), the client is unable to decrypt it. We're told the error they're getting is gpg: decryption failed: No secret key

当我们测试用Cryptophane(不同的电脑,运行Windows而不是Ubuntu)和相同的公钥来加密一个文件时,他们能够解密。这就是几个月来手动成功加密的方式。当测试同样的代码时,用our公司的公钥,我们能够使用我们的私钥和Cryptophane来解密它。

我在网上广泛搜索了错误信息和一般问题,没有发现任何似乎是同一问题得到解决的东西。

下面是相关的代码。filepath是要加密的文件的相对路径。pgp_key_name是包含公钥的.asc文件的名称。pgp_key_dir是它所在的目录。

def pgp_encrypt_file(filepath, pgp_key_name, pgp_key_dir): gpg = gnupg.GPG() output_full_filepath = filepath + '.pgp' try: with open(pgp_key_dir + pgp_key_name) as file: key_data = file.read() import_result = gpg.import_keys(key_data) logger.info(msg='Public key imported: {}'.format(pgp_key_name)) public_keys = gpg.list_keys() fingerprint = public_keys[0]['fingerprint'] logger.info(msg='Attempting to encrypt file: ' + output_full_filepath) with open(filepath, 'r') as f: newfile = f.read() status = gpg.encrypt(newfile, fingerprint, output=output_full_filepath) logger.info(msg='status.ok : ' + str(status.ok)) logger.info(msg='status.status : ' + str(status.status)) except FileNotFoundError as e: logger.error(msg='File not found: ' + str(e)) except TypeError as e: logger.error(msg='GNUPG TypeError: ' + str(e)) return output_full_filepath

以及日志的相关部分。

03-01 15:18:58 gnupg INFO Setting homedir to '/home/[user]/.config/python-gnupg' 03-01 15:18:58 gnupg ERROR Could neither invoke nor terminate a gpg process... Are you sure you specified the corrent (and full) path to the gpg binary?

(这个错误后来没有出现,而且我在谷歌或Stack Overflow上也找不到任何相关信息)。

03-04 09:04:39 gnupg WARNING Ignoring '/usr/bin/gpg' (path is a symlink) 03-04 09:04:39 gnupg ERROR Could not find binary for 'gpg'. 03-04 09:04:39 gnupg INFO Setting homedir to '/home/[user]/.config/python-gnupg' 03-04 09:04:39 gnupg INFO Initialised settings: binary: /usr/bin/gpg2 binary version: `2.0.14\ncfg:pubkey:1;16;17\ncfg:cipher:2;3;4;7;8;9;10;11;12;13\ncfg:ciphername:3DES;CAST5;BLOWFISH;AES;AES192;AES256;TWOFISH;CAMELLIA128;CAMELLIA192;CAMELLIA256\ncfg:digest:1;2;3;8;9;10;11\ncfg:digestname:MD5;SHA1;RIPEMD160;SHA256;SHA384;SHA512;SHA224\ncfg:compress:0;1;2;3\n' homedir: /home/[user]/.config/python-gnupg ignore_homedir_permissions: False keyring: /home/[user]/.config/python-gnupg/pubring.gpg secring: /home/[user]/.config/python-gnupg/secring.gpg default_preference_list: SHA512 SHA384 SHA256 AES256 CAMELLIA256 TWOFISH AES192 ZLIB ZIP Uncompressed keyserver: hkp://wwwkeys.pgp.net options: None verbose: False use_agent: False 03-04 09:04:39 gnupg INFO Importing: [first few lines of public key] 03-04 09:04:39 root INFO Public key imported: [name of key] 03-04 09:04:39 root INFO Attempting to encrypt file: [file] 03-04 09:04:39 gnupg INFO Writing encrypted output to file: [file.pgp] 03-04 09:04:39 gnupg INFO Encrypted output written successfully.

一些想法和我们尝试过的事情。

虽然在/usr/bin/gpg中有一个gpg二进制文件,但我们在项目本身中使用了一个conda虚拟环境,我认为这可能会把它搞乱。然而,当我从命令行上运行这段代码时,在环境停用的情况下,我最终得到了同样的结果。 我看到日志文件说它找不到gpg二进制文件,而且它忽略了一个指向它的符号链接,但此后所有的状态信息似乎都表明加密是正常的,而且同样,用不同的公钥/私钥对多次运行都很正常。

在 IDE 中检查【替换代码 7】对象,一旦实例化,我就认为它能很好地找到 gpg 二进制文件,甚至没有向【替换代码 8】传递任何参数。传入gnupghome='/usr/bin/gpg'会让我找到同样的地方,而传入gnupghome='not/real/path则会出现错误。

将通话中的armor=False设置为encrypt并没有改变什么。

我真的很感谢关于这个问题的任何和所有的想法。 如果答案是它没有在正确的目录中寻找gpg二进制文件或homedir,由于我们的虚拟环境设置,也希望能有关于如何解决这个问题的建议。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3