c# - 如何用私钥加密字符串并用公钥解密?

标签 c# encryption

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

最佳答案

据我所知,虽然从技术上讲公钥和私钥在数学上没有区别,但出于安全原因,您需要始终如一地使用它们。

您要求使用私钥加密并使用公钥解密。这通常是错误的方法。如果要朝这个方向发展,通常是一种叫做“数字签名”的操作。

如果您使用私钥签名,使其可以被公钥 逆转,那么它就不是真正的 secret 。我假设您只是想验证邮件是来自发件人的合法邮件。您需要的是数字签名 - 仍然使用公钥私钥(或“非对称”) key 执行。

有了数字签名,消息本身就不是 secret 的(没有必要,因为任何拥有公钥的人都可以解密它)但是伴随着基于消息的附加数据,可以使用公钥验证并且可以仅由具有匹配私钥的人计算。

它看起来像下面这样。现在您只需要弄清楚从哪里获得 key 即可。

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);
  }
}

关于c# - 如何用私钥加密字符串并用公钥解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4828803/

相关文章:

c# - SQL备份文件,区分部分和完整备份文件

c# - 在父构造函数之前调用子类构造函数

c# - MySQL 和 EF6 的 ASP.NET 身份迁移问题

php - 在 Coldfusion 中加密,然后在 PHP 中解密

java - 使用 Java/Jackcess 从加密的 Access .mdb 中读取

C# 使用引用已分配变量的分配列表

c# - 将 CheckedListBox 项目保存到设置

Java AES : No installed provider supports this key: javax. crypto.spec.SecretKeySpec

encryption - SQL EncryptByKey/DecryptByKey 把英文保存的数据变成非英文字符

javascript - 如何将 HMAC 添加到 CryptoJS AES 加密?