RSACryptoServiceProvider 仅使用私钥解密
RSACryptoServiceProvider decrypt using only private key
我需要为应用程序生成许可证密钥。我考虑过使用 RSACryptoServiceProvider,但我注意到使用 ToXmlString(true) 生成的私钥也包含 public 密钥。
问题是应用程序将存储在客户端服务器上,我不希望他们能够使用我生成的密钥中的 public 密钥部分生成自己的许可证密钥。
例如,如果我有这个私钥
<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>
有没有办法在没有模数和指数标签的情况下解密?
只有拥有私钥才能解密数据。所以我不想将密钥传递给您的客户端设备。否则任何人都可以访问 pk 并创建它自己的许可证。
创建您的许可证并使用您的私钥对其进行签名会更有意义。然后您的客户端应用程序将仅检查有效签名 - 我认为这是我在多个许可服务实施中看到的最佳实践。
我需要为应用程序生成许可证密钥。我考虑过使用 RSACryptoServiceProvider,但我注意到使用 ToXmlString(true) 生成的私钥也包含 public 密钥。 问题是应用程序将存储在客户端服务器上,我不希望他们能够使用我生成的密钥中的 public 密钥部分生成自己的许可证密钥。
例如,如果我有这个私钥
<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>
有没有办法在没有模数和指数标签的情况下解密?
只有拥有私钥才能解密数据。所以我不想将密钥传递给您的客户端设备。否则任何人都可以访问 pk 并创建它自己的许可证。 创建您的许可证并使用您的私钥对其进行签名会更有意义。然后您的客户端应用程序将仅检查有效签名 - 我认为这是我在多个许可服务实施中看到的最佳实践。