【问题标题】:How to encrypt a string with private key and decrypt with public key?如何用私钥加密字符串并用公钥解密?
【发布时间】:2011-06-17 06:15:03
【问题描述】:

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

【问题讨论】:

  • 您不应该使用 RSA 加密任意字符串。您应该使用 RSA 加密随机生成的正确填充对称密钥。
  • @CodeInChaos:我同意大部分时间都在使用 RSA,但使用 RSA 不限于此。
  • AFAIK RSA 对于编码任意未填充的字符串并不安全。
  • 恐怕你在这里错过了这个概念。如果您使用私钥进行加密是没有用的,因为任何人都可以使用您的公钥对其进行解密(这是公开的权利?:) 如果您真正想要的是加密某些文本,请改用对称加密。如果您想不惜一切代价使用 RSA,请使用收件人的公钥来加密您的数据,而不是您自己的私钥。
  • 或许他想这样做,但需要一个重要的构建块来这样做。可以对两种方式进行加密,它们的公共密钥后跟您的私钥,以保证起点和终点。

标签: c# encryption


【解决方案1】:

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

【讨论】:

  • 这只是对数据进行签名。它不加密它。
猜你喜欢
  • 2015-11-02
  • 2021-04-01
  • 2015-08-23
  • 2015-07-31
  • 2013-06-08
  • 2012-04-21
  • 1970-01-01
  • 2015-01-25
  • 2021-02-17
相关资源
最近更新 更多