2

我不确定这是否是这个问题的正确位置,因为这可能更像是一个基于理论的问题。但我也对以下的 C# 实现感兴趣。以及它的可行性

我打算使用 PGP 对文件进行加密和解密。是否可以使用两个公钥(我的公钥和接收者的公钥)加密文件,以便我能够使用其中一个私钥解密文件。这种情况可行吗?那么我应该采取什么方向来正确实施相同的方法。任何帮助将不胜感激

4

4 回答 4

4

在高级别(如果您使用任何 PGP API),是的,您可以将两个或更多公共 PGP 密钥传递给 OpenPGP API(或软件)并加密数据。然后,您将能够使用与任何使用的公共 PGP 密钥相对应的 PGP 密钥来解密数据。

在较低级别 - OpenPGP 总是生成一个对称密钥来加密数据,然后使用一个或多个公共 PGP 密钥对该密钥进行加密,因此使用多少个密钥没有区别。

现在,使用什么取决于您使用的平台和开发环境(因为这是一个编程站点,我们假设您要在代码中加密数据)。对于 Linux 和 C,存在 GnuPG 库。对于 Java 和 C#,BouncyCastle 中有一些 PGP 支持。最后,我们的 SecureBlackbox 库的 OpenPGPBlackbox 为多种平台和语言(包括 .NET、VCL、ActiveX 和 C++)提供了完整的 OpenPGP 功能。

附带说明一下,您接受的答案是完全错误的,因此我强烈建议您不接受它。

于 2012-12-15T06:39:31.903 回答
3

看看这个维基页面:

http://en.wikipedia.org/wiki/Pretty_Good_Privacy

您将看到实际数据是用随机密钥加密/解密的,而这个随机密钥是用相应的公钥/私钥加密/解密的。

因此,您不必使用两个密钥来加密文件(数据)。您仍然使用一个随机密钥加密数据。唯一的区别是您使用多个公钥(例如您的和接收者的)加密这个随机密钥。

结果,你们中的任何人都可以使用私钥解密随机密钥并解密数据。

于 2012-12-14T22:06:19.817 回答
0

这个问题也可能属于crypto.stackexchange.com,但在这里也可以。我不确定您是否了解 PGP 的原理。公钥用于加密,私钥用于解密。因此,如果您使用您的公钥对其进行加密,则接收者将使用他/她的私钥来解密和/或签名。

有关更多信息,我建议您阅读有关 RSA 或 ElGamal 算法的信息。希望对您有所帮助:

这两种算法都提供了一个很好的起点。或者您可能想加入斯坦福大学提供的一些在线课程:

于 2012-12-14T21:17:00.137 回答
-4

我可以看到它工作的唯一方法是拥有一个包含两个文件的 zip 或 tar 存档:一个使用密钥 1 加密,另一个使用密钥 2。

如果文件是文本,您可以将同一原始文件的两个不同加密版本粘贴到一个文档中。

无法加密文件,因此可以使用我知道的两个不同的密钥对其进行解密。

于 2012-12-14T21:08:07.027 回答