2009-04-15 9 views
2

Nehmen Sie den Code ein:DES-Verschlüsselung in C#

DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
des.Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; 
ICryptoTransform encryptor = des.CreateEncryptor(); 
// encrypt 
byte[] x = UTF8Encoding.UTF8.GetBytes("thisIsATEST"); 
byte[] enc = encryptor.TransformFinalBlock(x, 0, x.Length); 
string savedValue = Convert.ToBase64String(enc); 



DESCryptoServiceProvider des1 = new DESCryptoServiceProvider(); 
des1.Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; 
ICryptoTransform decryptor = des1.CreateDecryptor(); 
byte[] y = Convert.FromBase64String(savedValue); 
// decrypt 
byte[] originalAgain = decryptor.TransformFinalBlock(y, 0, y.Length); 
System.Text.ASCIIEncoding e = new System.Text.ASCIIEncoding(); 
string str = e.GetString(originalAgain); 

Nun ist diese jedoch nicht, wenn des1.CreateDecryptor() zu entschlüsseln funktioniert; wird geändert in des.CreateDecryptor(); es funktioniert gut und ich bin unsicher, warum, wenn ich den gleichen Schlüssel benutze.

Es wirft keine Ausnahme, es konvertiert die Zeichenfolge nicht korrekt.

Antwort

4

Sofern Sie nicht etwas wie den ECB-Modus verwenden, benötigt der Entschlüsseler den Initialisierungsvektor, der vom Verschlüssler verwendet wird.

3

Es ist, weil Sie den Initialisierungsvektor (IV) nicht einstellen, der DESCryptoServiceProvider wird automatisch einen für Sie erzeugen, und da Sie 2 getrennte Instanzen haben, werden sie unterschiedlich sein.