System.Security.Cryptograph.RSACryptoServiceProvider を使用して実行している問題を特定する以下のテストがあります。問題は、r.Decrypt が「キーが存在しません」という例外をスローしていることです。(復号化時に publicKeyXml を使用する代わりに) 暗号化と復号化の両方に privateKeyXml を使用すると、期待どおりに動作します。もちろん、秘密鍵を共有したくはありません。公開鍵で復号化できる必要があります。ここで私が間違っていることを誰かが見ていますか?
[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);
}