Elemental
2007-06-14, 08:56:15
Hallo zusammen,
ich kämpfe gerade an der Entschlüsselung eines verschlüsselten xml-strings, der mir aus einer ClassLibrary geliefert wird.
So erzeuge ich das Rijndael-Objekt mit key und init-Vektor:
byte[] byteArray = Convert.FromBase64String(strXMLRecipeResults);
// Create a RijndaelManaged object
aesAlg = new RijndaelManaged();
aesAlg.Key = new byte[] { 91, 46, 46, 210, 129, 102, 145, 235, 147, 128, 112, 151, 42, 172, 247, 199, 57, 213, 231, 22, 1, 139, 100, 237, 132, 231, 224, 54, 179, 99, 167, 88 };
aesAlg.IV = new byte[] { 245, 51, 234, 142, 250, 200, 228, 93, 151, 109, 206, 231, 52, 32, 228, 212 };
// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
Das sollte richtig sein...
Jetzt zum eigentlichen entschlüsseln; ich habe zwei Varianten versucht:
1.
// Create the streams used for decryption.
msDecrypt = new MemoryStream(byteArray);
csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
srDecrypt = new StreamReader(csDecrypt);
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
string plaintext = srDecrypt.ReadToEnd();
Funktioniert so, allerdings steht dann in "plaintext" ein '\0' nach jedem Zeichen. Ein anschliessendes
plaintext = plaintext.Replace("\0", string.Empty);
und alles is paletti; nicht schön, aber funktioniert...
2.
//Create the streams
msDecrypt = new MemoryStream();
csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write);
//Write the data and make it do the decryption
csDecrypt.Write(byteArray, 0, byteArray.Length);
//Get the decrypted string
plaintext = System.Text.Encoding.Unicode.GetString(msDecrypt.ToArray());
Funktioniert fast wunderbar, d.h. keine '\0' nach jedem Zeichen, aber es fehlen die letzten 4 byte des strings :|
Jetzt meine Frage:
Wie macht man's richtig? :rolleyes:
mfG
Elemental
ich kämpfe gerade an der Entschlüsselung eines verschlüsselten xml-strings, der mir aus einer ClassLibrary geliefert wird.
So erzeuge ich das Rijndael-Objekt mit key und init-Vektor:
byte[] byteArray = Convert.FromBase64String(strXMLRecipeResults);
// Create a RijndaelManaged object
aesAlg = new RijndaelManaged();
aesAlg.Key = new byte[] { 91, 46, 46, 210, 129, 102, 145, 235, 147, 128, 112, 151, 42, 172, 247, 199, 57, 213, 231, 22, 1, 139, 100, 237, 132, 231, 224, 54, 179, 99, 167, 88 };
aesAlg.IV = new byte[] { 245, 51, 234, 142, 250, 200, 228, 93, 151, 109, 206, 231, 52, 32, 228, 212 };
// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
Das sollte richtig sein...
Jetzt zum eigentlichen entschlüsseln; ich habe zwei Varianten versucht:
1.
// Create the streams used for decryption.
msDecrypt = new MemoryStream(byteArray);
csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
srDecrypt = new StreamReader(csDecrypt);
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
string plaintext = srDecrypt.ReadToEnd();
Funktioniert so, allerdings steht dann in "plaintext" ein '\0' nach jedem Zeichen. Ein anschliessendes
plaintext = plaintext.Replace("\0", string.Empty);
und alles is paletti; nicht schön, aber funktioniert...
2.
//Create the streams
msDecrypt = new MemoryStream();
csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write);
//Write the data and make it do the decryption
csDecrypt.Write(byteArray, 0, byteArray.Length);
//Get the decrypted string
plaintext = System.Text.Encoding.Unicode.GetString(msDecrypt.ToArray());
Funktioniert fast wunderbar, d.h. keine '\0' nach jedem Zeichen, aber es fehlen die letzten 4 byte des strings :|
Jetzt meine Frage:
Wie macht man's richtig? :rolleyes:
mfG
Elemental