Hallo,
Ich versuche gerade RSA zu Authentifizierung auf meinem Server zu nutzen und erstelle dafür XML Dateien in den der öffentlich und private Schlüssel ist. (RSACryptoProviderService.ToXmlString())
Mein Problem ist, das ich beim entschlüsseln, wenn ich diese Datei Lade, immer die Fehlermeldung kommt, "Ungültige Daten".
Zum erstellen des Containers benutze ich folgende Funktion.
private RSAParameters genKeyPair(string name)
{
CspParameters cspParams;
cspParams = new CspParameters(1);
cspParams.KeyContainerName = name;
cspParams.Flags = CspProviderFlags.UseDefaultKeyContainer;
cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
rsaCSP = new RSACryptoServiceProvider(512, cspParams);
RSAParameters RsaP = rsaCSP.ExportParameters(true);
byte[] temp = Encoding.ASCII.GetBytes(rsaCSP.ToXmlString(true));
FileStream fs = File.Create(name + ".key");
fs.Write(temp, 0, temp.Length);
fs.Close();
return RsaP;
}
Danach Lade ich die Datei in einem anderen Programm und Verschlüssel mit der DECRYPT Funktion (Auf Grund des Aufbaus des RSA sollte das ja möglich sein).
Funktion:
private byte[] generateLoginData(RSACryptoServiceProvider CrypPro)
{
string timeStamp = DateTime.Now.ToString("yyyy:MM:dd:HH:mm:ss"); // Der Time Stamp wird erstellt
byte[] decryptedData = new byte[3 + Encoding.Unicode.GetByteCount(timeStamp)]; //Das Byte array initialisiert und deklariert, da später verschlüsselt werden soll. Die größer ergibt sich aus der timestamp Größe in Unicode und 3 bytes für den öffentlich schlüssel der mit verschlüsselt wird
CrypPro.ExportParameters(false).Exponent.CopyTo(decryptedData, 0); // Der öffentlich schlüssel wird an den Beginn von decryptedData kopiert
Encoding.Unicode.GetBytes(timeStamp).CopyTo(decryptedData, 3); // Das der Timestamp der durch UNICODE in ein Byte[] umgewandelt wurde, wird dahinter kopiert
byte[] encryptedData = CrypPro.Decrypt(decryptedData, false); // decryptedData wird mit DECRYPT verschlüsselt
return encryptedData;
}
Auch wenn ich es zuerst normal mit encrypt verschlüssel und dann mit am server mit decrypt versuche kommt die gleiche fehlermeldung.
Ok hat sich erledigt, ich hatte an meiner Server klasse einen Kopiervorgang falsch gemacht so das das letzte Byte immer 0 war.
Hallo BangerzZ,
um nochmal das Stichwort zum Fehler in den Raum zu werfen: Dies ist ein klassicher Fall des Zaunpfahlproblems.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg