首页 > 解决方案 > 如何使用 *.pub/*.sec 文件加密/解密另一个文件?

问题描述

我使用此处给出的说明和代码创建了一对*.pub和文件:*.sec

https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html

(我使用这个文档是因为我想到的最终应用是一个自动加密/解密管道。)

Q1:如何使用 gpg2 和*.pub文件加密另一个文件?

Q2:如何使用 gpg2 和伴随*.sec文件解密使用伴随文件加密的*.pub文件?


重要提示: 我只对适用于无监督操作的编程实现的答案感兴趣。请不要发布只能以交互方式执行的答案。我对可以用 Python 实现的解决方案特别感兴趣。


请包括指向相关文档的精确指针。

标签: gnupg

解决方案


关于你所说的一些信息:

我使用说明创建了一对 *.pub 和 *.sec 文件

非常适合与您正在交换信息的人共享公钥,但从技术上讲,当您以编程方式工作时,您不需要直接使用这些文件。

需要注意的是:

  • 加密数据时,指定密钥对应的接收方,用于加密
  • 解密数据时,首先导入所有者的公钥,然后无需指定收件人即可解密数据,因为它嵌入在加密数据中

实际上,我对这个问题有些困惑。我已阅读相互矛盾的信息 [...]

我同意这很令人困惑。在这种情况下,我认为最好使用有更多经验的版本 1,并找到第三方库来使用。

在这个答案中,我尝试了:

使用第一个库,您可以简单地将其安装到您的系统中:

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


推荐阅读