【问题标题】:Asymmetric Encryption and Decryption非对称加密和解密
【发布时间】:2013-04-22 02:20:52
【问题描述】:

假设我使用这个网站上的算法用公私钥加密和解密数据:

Public Key RSA Encryption in C# .NET 在 CodeProject 上

现在,假设有人使用我的公钥使用另一种算法加密他的数据并将其发送给我。使用不同的算法(如网站上的算法),我可以使用我的私钥解密信息吗?或者这是不可能的,因为算法不同?

我的意思是,假设使用的密钥是正确的,如果使用不同的加密算法,最终结果是否总是相同的?

是否有一些标准的方法来加密信息,使其可以在不同的机器上解密,也许是不同的编程语言?

【问题讨论】:

  • 这个人还在使用什么其他算法?只要他们使用 RSA,他们使用什么语言/实现并不重要。
  • 你需要使用相同的算法。但是常用的 RSA 方案并不多,因此您只需要指定使用哪一个即可。我会选择一种基于 OAEP 的填充方案。
  • @Matthew 乍一看,代码看起来很糟糕。我不会碰那个。使用适当的 RSA 混合方案,而不是尝试使用 RSA 加密长消息。
  • 作为初学者,您可能想了解一些基于 PGP 的 API。我认为 BouncyCastle 有这些方面的东西。但就我个人而言,我不使用 RSA 进行数据加密,所以我没有详细研究。我使用我自己的 NaCl 启发的加密库。
  • 您经常使用 RSA 等非对称加密开始对话,它对使用 n 位密钥(与 |n| 成比例)加密的消息的长度有限制。然后,您协商一个与 chaining 块密码(例如 AES)一起使用的对称密钥(允许您加密完整的消息/数据块)。如果您不知道消息的完整长度(想想视频流),您可以在密钥协商阶段之后使用诸如 Salsa20 之类的流密码。

标签: c# encryption cryptography pki


【解决方案1】:

正在进行一些讨论,但这是我回答问题的谦虚尝试:

使用不同的算法(如网站上的算法),我能否使用我的私钥将信息解密回来?还是因为算法不同所以这是不可能的?

您肯定不会能够解密数据。通常,您需要算法和密钥完全匹配。然而,可能不同的是:用于加密/解密的平台、操作系统、硬件、语言或程序。这是因为算法充当具有明确定义的规范的公共合约,只要所有公共 API 呈现相同的结果,实现可能会有所不同。

我的意思是,假设使用的密钥是正确的,如果使用不同的加密算法,最终结果是否总是相同的?

几乎每次这些都会产生不同的结果(几乎可以说,我只是不知道有任何此类算法)。您需要完全匹配算法和所需的密钥。

是否有一些标准的方法来加密信息,使其可以在不同的机器上解密,也许是不同的编程语言?

是的 RSA,例如,确保您的私钥安全并共享您的公钥。这就是 HTTPS 首先要做的事情。每个拥有公钥的人都可以解密使用私钥加密的数据。

或者,您可以使用 AES,一种使用单个密钥的对称算法来加密/解密。这是 HTTPS 所做的第二件事。假设您仅在受信任的各方之间共享密钥,那么双方都可以加密和解密(但其他人都不能,因为他们没有密钥)。

【讨论】:

  • 非常感谢 oleksii 的详细回复 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 2019-07-29
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多