非对称加密和解密

4
假设我使用此网站上的算法来使用公钥和私钥加密和解密数据: CodeProject上的C# .NET中的公钥RSA加密 现在,假设有人使用我的公钥使用另一个算法加密他的数据并将其发送给我。如果使用不同的算法(例如此网站上的算法),我能否使用我的私钥将信息解密回来?还是这是不可能的,因为算法不同?
我的观点是,如果使用正确的密钥,不同的加密算法是否始终产生相同的结果?
是否存在一些标准方法可以加密信息以便在不同的计算机或编程语言之间进行解密?

2
这个人在使用什么其他算法?只要他们使用RSA,他们使用的语言/实现就不重要。 - The Scrum Meister
2
你需要使用相同的算法。但是常见的RSA方案并不多,所以你只需要指定使用哪一个。我建议选择基于OAEP填充方案之一。 - CodesInChaos
1
@Matthew 乍一看,那段代码看起来很糟糕。我不会碰那个。使用一个合适的混合方案,而不是试图用RSA加密长消息。 - CodesInChaos
1
作为初学者,您可能想要研究一些基于PGP的API。我认为BouncyCastle有类似的东西。但是个人而言,我不使用RSA进行数据加密,所以我没有详细研究过这个。我使用自己的NaCl受启发的加密库。 - CodesInChaos
1
你通常会从非对称加密(如RSA)开始谈起,它有一个使用n位密钥加密信息时的限制(与|n|成比例)。然后你会协商使用一种对称密钥,该密钥与*链接块密码(如AES)配合使用,以便你可以加密整个消息/数据块。如果您不知道消息的完整长度(考虑视频流),则在密钥协商阶段后使用流密码,例如Salsa20。 - Henrik
显示剩余3条评论
1个回答

8

有一些讨论,但这是我谦虚地回答问题的尝试:

如果使用不同的算法(比如网站上的算法),我能用我的私钥解密信息吗?或者由于算法不同而不可能?

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

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

几乎每次结果都会不同(说“几乎”,我只是不知道有没有这样的算法)。你需要完全匹配算法和所需的密钥。

有没有标准的方法来加密信息,使其在不同的机器上,甚至不同的编程语言中都可以解密?

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

或者,你可以使用AES,这是一种对称算法,只有一个密钥用于加密/解密。这是HTTPS第二次要做的事情。只要在受信任的各方之间共享密钥,两者都可以加密和解密(但其他人不能,因为他们没有密钥)。


非常感谢Oleksii提供的详细回复 :) - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接