使用 PGP 密钥加密

本文关键字:加密 密钥 PGP 使用 | 更新日期: 2023-09-27 18:32:28

我最近被指派加密一些数据并将其发送到我们的服务器。我在互联网上找到了一些有价值的资源,但它们都需要公钥,私钥和秘密密码才能加密。请问有什么简单的方法可以只用 pgp 密钥加密,因为这就是我得到的?

使用 PGP 密钥加密

我假设你得到了一个公共的OpenPGP密钥。这个足以对数据进行加密,这些数据旨在由给您公钥的人解密。

在.NET中,您可以使用SecureBlackbox产品的BouncyCastle或OpenPGPBlackbox包。SecureBlackbox附带了广泛的示例,并且还提供了支持(与替代方案不同(。

公共PGP密钥可以加密数据并验证签名。私有PGP密钥可以解密数据和签署数据。如果您有某人的公钥,只需使用它,它不会提示您输入密码。

PGP只是使用私钥和公钥对。据我所知,秘密密码是可选的。

任何语言的标准PGP加密过程的工作原理如下:

第 1 步:生成私钥/公钥对

首先生成您的OpenPGP密钥对,例如使用gnupg。该对由发送方用来加密数据的公钥和接收方用来解密数据的私钥组成。

第 2 步:共享您的公钥并收集其他方的公钥

每一方都需要拥有所有其他各方的公钥。要执行此步骤,您可以使用 U 盘提供公钥,也可以将其上传到公钥服务器。

第 3 步:加密并发送数据

您写入数据并为收件人加密。您还可以对数据进行签名,这保证收件人可以验证数据是否已由您创建。加密后,您将数据发送给收件人。

步骤 4:数据身份验证

您不必执行此步骤,但非对称加密(如PGP(的另一个好处是它允许身份验证。与合作伙伴交换公钥后,私钥可用于对加密内容进行数字签名,从而允许解密站点验证发件人的真实性。

使用私钥完成数据加密后,您可以使用收件人(可能还有其他方(已知的公钥加密会话密钥。之后,您可以选择创建加密数据的哈希值,并使用私钥对此哈希进行签名,这称为签名。

例如

,将数据保存为 OpenPGP 格式。

步骤 5:解密数据并验证签名

如果您收到数据,则对其进行解密,如果数据已签名,则验证签名以确保数据是由您拥有公钥的发件人发送的。

最近,我正在进行PGP加密并将文件发送到SFTP服务器。以下是我对Python的简单步骤:

pip install py-pgp

将public_key保留在同一目录中

获取收件人信息 gpg --list-keys

脚本:

import os, gnupg
key = '<public_key>.asc'
src = '<file_to_be_encrypted>'
dst = './' #destination, it could be current directory
def encrypt(key, src):
    home = os.path.join(os.getcwd(), '')
    gpg = gnupg.GPG(gnupghome=home)
    with open(key, "rb") as f:
        keys = gpg.import_keys(f.read())
    with open(src, "rb") as f:
         result = gpg.encrypt_file(f, recipients='<name_retrieved_from_public_key>', output='<file_name>.pgp', always_trust=True)
    if not result:
        raise RuntimeError(result.status)

encrypt(key, src)

这将为您提供同一目录中的加密文件。