2017-06-30 4 views
0

Ich versuchte Bytes zu entschlüsseln, aber ich habe Fehler "length of data to decrypt is invalid" in line read = cryptoStream.Read(buffer, 0, len);inputFile.lenght = 4256, len = 4256AES Decrypting C#

Dies ist der Code

entschlüsseln
 byte[] salt = new byte[32]; 

     FileStream fsCrypt = new FileStream(inputFile, FileMode.Open); 

     fsCrypt.Seek(fsCrypt.Length - 376, SeekOrigin.Begin); 
     fsCrypt.Read(salt, 0, salt.Length); 
     byte[] passwordBytes = Encoding.UTF8.GetBytes(password); 
     RijndaelManaged AES = new RijndaelManaged(); 
     AES.KeySize = 256; 
     AES.BlockSize = 128; 
     var key = new Rfc2898DeriveBytes(passwordBytes, salt, 50000); 
     AES.Key = key.GetBytes(AES.KeySize/8); 
     AES.IV = key.GetBytes(AES.BlockSize/8); 
     AES.Padding = PaddingMode.PKCS7; 
     AES.Mode = CipherMode.CFB; 
     int read; 
     byte[] buffer = new byte[1048576]; 
     List <byte> bytes = new List <byte>(); 

     fsCrypt.Seek(0, SeekOrigin.Begin); 
     read = 1; 
     var len = Convert.ToInt32(fsCrypt.Length); 

     MemoryStream mem = new MemoryStream(); 
     fsCrypt.CopyTo(mem); 
     mem.Position = 0; 
     using(CryptoStream cryptoStream = new CryptoStream(mem, AES.CreateDecryptor(), CryptoStreamMode.Read)) // CryptoStream cryptoStream = new CryptoStream(fsCrypt, AES.CreateDecryptor(), CryptoStreamMode.Read 
     { 
      //var buffer2 = new byte[len]; 
      while ((read = cs.Read(buffer, 0, buffer.Length)) > 0) { 
      foreach(var m in buffer) 
      bytes.Add(m); 
      } 
     } 

Can u mir helfen? Was ist das Problem in diesem Code?

nahm ich das Beispiel des AES encryption on large files

Wie ich verschlüsseln:

byte[] salt = GenerateRandomSalt(); 


//convert password string to byte arrray 
byte[] passwordBytes = System.Text.Encoding.UTF8.GetBytes(password); 

//Set Rijndael symmetric encryption algorithm 71 246 
RijndaelManaged AES = new RijndaelManaged(); 
AES.KeySize = 256; 
AES.BlockSize = 128; 
AES.Padding = PaddingMode.PKCS7; 


var key = new Rfc2898DeriveBytes(passwordBytes, salt, 50000); 
AES.Key = key.GetBytes(AES.KeySize/8); 
AES.IV = key.GetBytes(AES.BlockSize/8); 

AES.Mode = CipherMode.CFB; 
var kk = key.ToString(); 


FileStream fsIn = new FileStream(inputFile, FileMode.Open); 


byte[] buffer = new byte[1048576]; 
int read = 0; 



byte[] encrypted; 
using(MemoryStream msEncrypt = new MemoryStream()) { 
    using(CryptoStream csEncrypt = new CryptoStream(msEncrypt, AES.CreateEncryptor(), CryptoStreamMode.Write)) { 
    fsIn.Seek(0, SeekOrigin.Begin); 

    while ((read = fsIn.Read(buffer, 0, buffer.Length)) > 0) { 
    csEncrypt.Write(buffer, 0, read); 
    } 
    encrypted = msEncrypt.ToArray(); 
    } 
} 

fsIn.Seek(0, SeekOrigin.Begin); 
fsIn.Write(encrypted, 0, encrypted.Length); 

fsIn.Seek(fsIn.Length, SeekOrigin.Begin); 
fsIn.Write(salt, 0, salt.Length); 
+0

Die Länge Ihrer Daten sind Entschlüsseln Sie ist falsch –

+0

@JoePhillips i-Code hinzugefügt, wie i-Datei kodieren, kann u bitte – Lolidze

Antwort

1

Sie rufen encrypted = msEncrypt.ToArray(); zu früh auf Verschlüsselung, es für csEncrypt nach dem Ende der Anweisung using sein müssen, damit alle Daten werden in den Speicherstrom ausgegeben.

Auch in Ihrem Entschlüsselung Sie Art und Weise beginnen, in der Datei zu früh

fsCrypt.Seek(fsCrypt.Length - 376, SeekOrigin.Begin); likey fsCrypt.Seek(fsCrypt.Length - 32, SeekOrigin.Begin); wenn Ihr salt.Length war 32 sein soll, wenn Sie es schreiben.

Schließlich trimmen Sie auch nicht das Salz aus, bevor Sie es an mem übergeben, so dass Sie die Salzdaten in den Stream zusammen mit dem ciphertext übergeben und es Ihre Nachricht zu lang macht.

+0

überprüfen i Linie bewegt 'verschlüsselt = msEncrypt.ToArray();' 'nach Verwendung (Crypto csEncrypt = neuer cryptoStream (msEncrypt, AES.CreateEncryptor(), CryptoStreamMode.Write)) [link] (https://pastebin.com/y9ge5W5P) aber wenn ich wieder entschlüsseln bekomme ich Fehler – Lolidze

+0

Gefunden zwei andere Fehler und aktualisierte Antwort –

+0

vielen Dank viel, und erzählen Sie mir nicht, wie man Salz vom Strom schneidet? – Lolidze

Verwandte Themen