【问题标题】:Encryption with PGP key使用 PGP 密钥加密
【发布时间】:2012-05-06 22:37:13
【问题描述】:

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

【问题讨论】:

  • PGP 加密 IS 需要公钥/私钥对才能工作的非对称加密。如果给你一个公钥,告诉他们你需要私钥来加密。
  • @RobertRouhani 完全错误。使用公钥进行加密。
  • @EugeneMayevski'EldoSCorp 哎呀,倒写了。我以前用过 PGP,现在时间不早了,我需要睡觉。

标签: c# .net encryption pgp


【解决方案1】:

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

【讨论】:

  • 这个答案很模糊。它使用一对私钥和公钥,但不是在所有方面 - 用于加密的公钥和用于解密的私钥。秘密密码对于加密来说不是可选的,它根本不被使用。
【解决方案2】:

我假设您已经获得了一个公开的 OpenPGP 密钥。这足以对数据进行加密,旨在由向您提供公钥的人解密。

在 .NET 中,您可以使用我们的 SecureBlackbox 产品的 BouncyCastle 或 OpenPGPBlackbox 包。 SecureBlackbox 附带大量示例并提供支持(与替代品不同)。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      任何语言的标准 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)
        

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

        【讨论】:

          猜你喜欢
          • 2021-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-26
          • 2011-03-20
          • 1970-01-01
          • 1970-01-01
          • 2020-12-13
          相关资源
          最近更新 更多