2011-01-28 121 views
8

我从来没有使用加密库,但我想用私钥加密一个字符串,并用公钥解密。如何在C#中实现这一点。请用小代码片段帮助我。 谢谢如何使用私钥加密字符串并使用公钥解密?

+1

你不应该加密与RSA任意的字符串。您应该使用RSA加密随机生成的**正确填充的**对称密钥。 – CodesInChaos 2011-01-28 16:15:24

+1

@CodeInChaos:我同意这是RSA在大部分时间都在使用的东西,但是使用RSA并不限于此。 – 2011-01-28 17:21:44

回答

10

AFAIK,尽管公钥和私钥在数学上没有技术上的差异,但是出于安全原因,您需要一致地使用它们。

您要求使用私钥进行加密并使用公钥进行解密。这通常是错误的。如果你想要走这个方向,通常是一个名为“数字签名”的操作。

如果用私有密钥,使得它是由公钥可逆的签字,那么它是不是一个真正的秘密。我假设你只是试图从发件人合法地认证邮件。您需要的是数字签名 - 仍然使用公钥 - 私钥(或“不对称”)密钥执行。

对于数字签名,消息本身并不是秘密的(因为任何拥有公钥的人都可以解密它),但是伴随着基于消息的附加数据,这些数据可以使用公钥进行验证,并且可以只能由具有匹配私钥的人计算。

它看起来像下面这样。现在你只需要弄清楚你会得到钥匙的位置。

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); 
    } 
} 
相关问题