RSACryptoServiceProvider仅使用私钥解密

时间:2015-01-12 11:54:24

标签: c# .net encryption

我需要为应用程序生成许可证密钥。我考虑过使用RSACryptoServiceProvider,但我注意到使用ToXmlString(true)生成的私钥也包含公钥。 问题是应用程序将存储在客户端服务器上,并且我不希望它们能够使用我生成的密钥中的公钥部分生成自己的许可证密钥。

例如,如果我有这个私钥

<RSAKeyValue>
  <Modulus>mqZY4yfKdHJ6gl/5elFgSXnDLztsj6fpCmjNymYyeWa/4qVA66fydrAE5Rl2OVoNCRUTpCUM8paZxh2eqza5lETYRdfRw+4FNu2rO13synPTKirck0JucCDXytQBZZnD4SFCljJr3NDlYveuEk7NsdeIsHYypXvPtURhkDtDGG8=</Modulus>
  <Exponent>AQAB</Exponent>
  <P>zD53GW+HevT5SaWsvLwoT/qUO5MZXgbg7ME1OLwmzd99nRZuIayhLrkYZ9MWNnL2BWLGcRbj7GlOXUY2ouqsfQ==</P>
  <Q>wdamjYch6EQgXDe6lA/zb8lAWxO+Djjkrtda2cjwXrMoLbJUKVo3z/pmWCnNX9I3v5PtM8YoL4Pp6zXcVuloWw==</Q>
  <DP>L7goe3jjXob994cN5MrRYF5bY8/qjV1uD+LUXH0ZU+BzqNAkyxlaT2BPo3JeLjqN4JRDaQjAF+xCsuhEu6u4wQ==</DP>
  <DQ>umTai8WiCWNZatP8Cly8ToZL6Ei3vZ1f6fEUX9AltCq7PBX7cDhc6xVyTN0FrFrNWN+6fMrT4b0Lty53zutreQ==</DQ>
  <InverseQ>g+DldM+/FD/3vEop5o4T2xjL8SIYSFY3kjPIrIxFkzpVGb98jHYT+JNjdezw2n78AawqUhRBLCgDnC6K2YmINQ==</InverseQ>
  <D>Crtoh7sHLbWUEuAeLALhr7end+ujyQRaA8LqJRWagxpCTrQxISlyhhIJBO0Taz94kBzKVCXOFDenTDxZ+n+9uRS9zlg1nE3thEqrWf/fOMB+H+49HF/stSCyFp2+xqKFPBzwL2hrdixsEe5beWaM8r1nLChKzG3/BbVlY5/a2GE=</D>
</RSAKeyValue>

有没有一种方法可以在没有模数和指数标签的情况下进行解密?

1 个答案:

答案 0 :(得分:0)

如果您拥有私钥,则只能解密数据。所以我不希望将密钥传递给您的客户端设备。否则任何人都可以访问pk并创建自己的许可证。 创建许可证并使用私钥对其进行签名会更有意义。然后,您的客户端应用程序将仅检查有效签名 - 我认为这是我在多个许可服务实现中看到的最佳实践。