我最近被分配到加密一些数据并将其发送到我们的服务器的任务。我在互联网上找到了一些有价值的资源,但它们都需要公钥、私钥和密码才能加密。请问有什么简单的方法可以只用 pgp 密钥加密,因为这就是我得到的?
5 回答
我假设你已经获得了一个公开的 OpenPGP 密钥。这足以对数据进行加密,旨在由向您提供公钥的人解密。
在 .NET 中,您可以使用我们 SecureBlackbox 产品的 BouncyCastle 或OpenPGPBlackbox包。SecureBlackbox 附带大量示例并提供支持(与替代品不同)。
公共 PGP 密钥可以加密数据并验证签名。私有 PGP 密钥可以解密数据和签署数据。如果您有某人的公钥,只需使用它,它不会提示您输入密码。
PGP 只使用一对私钥和公钥。据我所知,秘密密码是可选的。
最近,我正在做 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)
这将为您提供同一目录中的加密文件。
任何语言的标准 PGP 加密过程如下:
第 1 步:生成您的私钥/公钥对
首先生成您的 OpenPGP 密钥对,例如使用gnupg。该对由发送方用来加密数据的公钥和接收方用来解密数据的私钥组成。
第 2 步:共享您的公钥并收集其他方的公钥
每一方都需要拥有所有其他方的公钥。要执行此步骤,您可以使用 U 盘提供您的公钥,或者将其上传到公钥服务器。
第 3 步:加密并发送您的数据
您编写数据并为收件人加密。您还可以对数据进行签名,以保证收件人可以验证数据是由您创建的。加密后,您将数据发送给收件人。
第 4 步:数据验证
您不必执行此步骤,但非对称加密(例如 PGP)的另一个好处是它允许身份验证。在您与合作伙伴交换公钥后,私钥可用于对加密内容进行数字签名,从而允许解密站点验证发件人的真实性。
使用私钥完成数据加密后,您可以使用接收方(可能还有其他方)已知的公钥加密会话密钥。之后,您可以选择创建加密数据的哈希并使用您的私钥对该哈希进行签名,这称为签名。
以例如 OpenPGP 格式保存数据。
第五步:解密数据并验证签名
如果您收到您解密的数据并且如果数据已签名,则验证签名以确保数据是由您拥有公钥的发件人发送的。