Ich habe den folgenden Test, der ein Problem isoliert, das ich benutze, mit System.Security.Cryptograph.RSACryptoServiceProvider. Das Problem ist, dass r.Decrypt die Ausnahme "Schlüssel existiert nicht" auslöst. Wenn ich privateKeyXml sowohl für die Verschlüsselung als auch für die Entschlüsselung verwende (anstatt publicKeyXml beim Entschlüsseln zu verwenden), funktioniert es wie erwartet. Natürlich möchte ich den privaten Schlüssel nicht teilen, ich muss mit dem öffentlichen Schlüssel entschlüsseln können. Kann jemand sehen, was ich hier falsch mache?Ausnahme "Schlüssel nicht vorhanden" ausgelöst. Was mache ich falsch?
[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);
}
möglich Duplikat [wie einen verschlüsselten Text mit RSACryptoServiceProvider entschlüsseln?] (Http://stackoverflow.com/questions/6763741/how -zum entschlüsseln-ein-verschlüsselter-text-using-rsacrptoserviceprovider –
Vergessen Sie nicht, wie asymmetrische Verschlüsselung funktioniert: Sie verschlüsseln immer mit dem öffentlichen Schlüssel und entschlüsseln mit dem privaten Schlüssel. –
Ja, das ist ein Betrogener. Danke, –