C# 非对称加密和解密

C# 非对称加密和解密,c#,encryption,cryptography,pki,C#,Encryption,Cryptography,Pki,假设我使用此站点上的算法使用公私密钥加密和解密数据: 论代码工程 现在,让我们假设有人使用另一种算法使用我的公钥加密他的数据并将其发送给我。使用不同的算法(比如网站上的算法),我能用我的私钥解密信息吗?或者这是不可能的,因为算法不同 我的观点是,如果使用不同的加密算法,假设使用的密钥是正确的,那么最终结果是否总是相同的 是否有一些标准的方法来加密信息,使其可以在不同的机器上解密,可能是不同的编程语言 我们正在进行一些讨论,但下面是我谦虚的回答问题的尝试: 使用不同的算法(比如网站上的算法),我能

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

论代码工程

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

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


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

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

使用不同的算法(比如网站上的算法),我能用我的私钥解密信息吗?或者这是不可能的,因为算法不同

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

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

几乎每次都会有不同的结果(也就是说,我几乎不知道有任何这样的算法)。您需要有算法和所需密钥的完全匹配

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

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


或者,您可以使用AES,一种具有单个密钥的对称算法来加密/解密。这是HTTPS第二次做的事情。如果您仅在受信任方之间共享密钥,则双方都可以加密和解密(但如果其他人没有密钥,则其他人无法加密和解密)。

此人使用的其他算法是什么?只要他们使用RSA,他们使用的语言/实现就无关紧要。您需要使用相同的算法。但是常用的RSA方案并不多,所以您只需要指定使用哪一种。我会选择一种基于OAEP的填充方案。@Matthew一眼就看出代码看起来很糟糕。我不会碰那个。使用合适的RSA混合方案,而不是尝试使用RSA加密长消息。作为初学者,您可能希望了解一些基于PGP的API。我认为BouncyCastle有类似的东西。但就我个人而言,我不使用RSA进行数据加密,所以我没有详细研究。我使用的是我自己设计的加密库。您经常使用非对称加密(如RSA)开始对话,RSA对使用n位密钥(与| n |成比例)加密的消息长度有限制。然后协商与链接块密码(如AES)一起使用的对称密钥(允许您加密完整的消息/数据块)。如果您不知道消息的完整长度(请考虑视频流),那么在密钥协商阶段之后,您可以使用流密码,例如Salsa20。非常感谢oleksii的详细回复:)