6
我有下面的測試,它隔離了使用System.Security.Cryptograph.RSACryptoServiceProvider時遇到的問題。問題是r.Decrypt拋出異常「密鑰不存在」。如果我使用privateKeyXml進行加密和解密(而不是在解密時使用publicKeyXml),那麼它按預期工作。當然我不想分享私鑰,我需要能夠用公鑰解密。 有沒有人看到我在這裏做錯了?「鍵不存在」拋出異常。我究竟做錯了什麼?
[Fact]
public void BasicEncryptDecrypt()
{
var cspParameters = new CspParameters() { Flags = CspProviderFlags.CreateEphemeralKey | CspProviderFlags.NoPrompt };
string privateKeyXml = null;
string publicKeyXml = null;
using(var r = new RSACryptoServiceProvider(2048, cspParameters)){
r.PersistKeyInCsp = false;
privateKeyXml = r.ToXmlString(true);
publicKeyXml = r.ToXmlString(false);
}
byte[] encrypted = null;
string decrypted = null;
using (var r = new RSACryptoServiceProvider(2048, cspParameters))
{
r.FromXmlString(privateKeyXml);
encrypted = r.Encrypt(Encoding.UTF8.GetBytes("foobar"), false);
}
using (var r = new RSACryptoServiceProvider(2048, cspParameters))
{
r.FromXmlString(publicKeyXml);
decrypted = Encoding.UTF8.GetString(r.Decrypt(encrypted, false));
}
Assert.Equal("foobar", decrypted);
}
可能重複[如何使用的RSACryptoServiceProvider解密加密的文本?](http://stackoverflow.com/questions/6763741/how -crypt-text-using-rsacryptoserviceprovider) –
不要忘記非對稱加密是如何工作的:你總是用公鑰進行加密並用私鑰解密。 –
是的,這是一個騙局。謝謝 –