gnupg - 如何使用 *.pub/*.sec 文件加密/解密另一个文件?
问题描述
我使用此处给出的说明和代码创建了一对*.pub
和文件:*.sec
https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html
(我使用这个文档是因为我想到的最终应用是一个自动加密/解密管道。)
Q1:如何使用 gpg2 和*.pub
文件加密另一个文件?
Q2:如何使用 gpg2 和伴随*.sec
文件解密使用伴随文件加密的*.pub
文件?
重要提示: 我只对适用于无监督操作的编程实现的答案感兴趣。请不要发布只能以交互方式执行的答案。我对可以用 Python 实现的解决方案特别感兴趣。
请包括指向相关文档的精确指针。
解决方案
关于你所说的一些信息:
我使用说明创建了一对 *.pub 和 *.sec 文件
非常适合与您正在交换信息的人共享公钥,但从技术上讲,当您以编程方式工作时,您不需要直接使用这些文件。
需要注意的是:
- 加密数据时,指定密钥对应的接收方,用于加密
- 解密数据时,首先导入所有者的公钥,然后无需指定收件人即可解密数据,因为它嵌入在加密数据中
实际上,我对这个问题有些困惑。我已阅读相互矛盾的信息 [...]
我同意这很令人困惑。在这种情况下,我认为最好使用有更多经验的版本 1,并找到第三方库来使用。
在这个答案中,我尝试了:
- python-gnupg(用于 GnuPG v1),它是一个著名的 Python 库,完全符合您的需求
- 我没有找到足够文档的cryptorito (用于GnuPG v2)
使用第一个库,您可以简单地将其安装到您的系统中:
sudo pip install python-gnupg
然后编写一个 Python 脚本来执行你想要的所有操作。
我写了一个简单的来回答你的问题。
#!/bin/python
import gnupg
GPG_DIR='/home/bsquare/.gnupg'
FILE_TO_ENCRYPT='/tmp/myFileToEncrypt'
ENCRYPTED_FILE='/tmp/encryptedFile'
DECRYPTED_FILE='/tmp/decryptedFile'
SENDER_USER='Bsquare'
TARGET_USER='Kjo'
gpg = gnupg.GPG(gnupghome=GPG_DIR)
print("Listing keys ...")
print(gpg.list_keys())
# On SENDER_USER side ... encrypt the file for TARGET_USER, with his public key (would match the kjo.pub if the key was exported).
print("Encrypting file " + FILE_TO_ENCRYPT + " for " + TARGET_USER + " ...")
with open(FILE_TO_ENCRYPT, "rb") as sourceFile:
encrypted_ascii_data = gpg.encrypt_file(sourceFile, TARGET_USER)
# print(encrypted_ascii_data)
with open(ENCRYPTED_FILE, "w+") as targetFile:
print("encrypted_ascii_data", targetFile)
# On TARGET_USER side ... decrypt the file with his private key (would match the kjo.sec if the key was exported).
print("Decrypting file " + ENCRYPTED_FILE + " for " + TARGET_USER + " ...")
with open(ENCRYPTED_FILE, "rb") as sourceFile:
decrypted_ascii_data = gpg.decrypt_file(sourceFile)
# print(decrypted_ascii_data)
with open(DECRYPTED_FILE, "w+") as targetFile:
print(decrypted_ascii_data, targetFile)
需要注意的是,我的密钥环包含我的用户的 pub/sec 对Bsquare
,以及用户的 pub 密钥Kjo
。
推荐阅读
- jenkins - 如何将图标添加到 Jenkins Blue-Ocean Pipelines Stages and Parameters 表单?
- r - 通过将数据帧与列表匹配来对数据帧进行子集化,并使用 R 在输出中包含不匹配的值
- python - 在 for 循环中训练顺序模型的内存不足;以前的解决方案不起作用
- tensorflow - conda env 和 jupyter notebook 中的 Tensorflow 版本不同
- linux - 能够在 bash SED 中使用变量
- ios - CordovaError:承诺被非错误拒绝:错误代码 65
- java - 如何访问类(实现可运行)字段
- sql - SQL 窗口函数
- c - 如何使用scanf从用户那里获取没有空格的字符串?
- python - 莳萝能记住一个类使用的库吗?