如何使用私钥加密字符串并使用公钥解密?

9

我之前从未使用过加密库,但我想用私钥加密字符串并通过公钥解密。如何在C#中实现这一点?请帮我提供一个小的代码片段。

谢谢!


1
在使用RSA算法时,不应该对任意字符串进行加密。而是应该通过RSA加密一个随机生成的,正确填充的对称密钥。 - CodesInChaos
1
@CodeInChaos:我同意RSA在大多数情况下都是用于此,但使用RSA并不仅限于此。 - Emond
据我所知,RSA不适用于编码任意未填充字符串的加密。 - CodesInChaos
1
很抱歉,您在这里缺少了概念。如果您使用私钥进行加密,那么任何人都可以使用您的公钥来解密它(公钥是公开的,对吧?:)如果您真正想要加密一些文本,请考虑使用对称加密。如果您想不惜一切代价使用RSA,请使用接收者的公钥来加密您的数据,而不是您自己的私钥。 - Ε Г И І И О
或许他想这么做,但需要一个必要的构建块来实现。可以双向加密,使用他们的公钥和您的私钥,以保证来源和目的地的安全。 - Zoey
我同意关于私钥目的的所有评论。但请注意,OP正在询问如何使用私钥加密字符串..今天我也遇到了完全相同的要求! - Yang You
1个回答

12
据我所知,公钥和私钥在数学上并没有区别,但出于安全原因,您需要始终一致地使用它们。你想用私钥加密并用公钥解密,这通常是错误的方向。如果您想走这条路线,通常称为“数字签名”操作。如果您使用私钥进行可逆签名,并使用公钥进行解签,则它实际上并不是保密的。我假设您只是想验证消息是否确实来自发件人。您需要的是数字签名-仍使用公钥-私钥(或“非对称”)密钥进行操作。通过数字签名,消息本身不是保密的(因为任何具有公钥的人都可以解密它),但伴随着基于消息的附加数据,该数据可以使用公钥进行验证,只有拥有匹配私钥的人才能计算出来。它会看起来像以下内容。现在您只需要弄清楚从哪里获取密钥即可。
static byte[] GenerateDigitalSignature(byte[] data, RSAParameters asymmetricKey)
{
  using (var rcsp = new RSACryptoServiceProvider())
  using (var cp = new SHA1CryptoServiceProvider())
  {
    rcsp.ImportParameters(asymmetricKey);

    return rcsp.SignData(data, cp);
  }
}

这只是对数据进行签名,而不是加密。 - Kraang Prime

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