Created
July 1, 2017 10:01
-
-
Save JoeSz/e7a9a38389765c470e8c7aa7dfbd9e8e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private void AES_Decrypt(string inputFile, string password) | |
{ | |
//todo: | |
// - create error message on wrong password | |
// - on cancel: close and delete file | |
// - on wrong password: close and delete file! | |
// - create a better filen name | |
// - could be check md5 hash on the files but it make this slow | |
byte[] passwordBytes = System.Text.Encoding.UTF8.GetBytes(password); | |
byte[] salt = new byte[32]; | |
FileStream fsCrypt = new FileStream(inputFile, FileMode.Open); | |
fsCrypt.Read(salt, 0, salt.Length); | |
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; | |
CryptoStream cs = new CryptoStream(fsCrypt, AES.CreateDecryptor(), CryptoStreamMode.Read); | |
FileStream fsOut = new FileStream(inputFile + ".decrypted", FileMode.Create); | |
int read; | |
byte[] buffer = new byte[1048576]; | |
try | |
{ | |
while ((read = cs.Read(buffer, 0, buffer.Length)) > 0) | |
{ | |
Application.DoEvents(); | |
fsOut.Write(buffer, 0, read); | |
} | |
} | |
catch (System.Security.Cryptography.CryptographicException ex_CryptographicException) | |
{ | |
Debug.WriteLine("CryptographicException error: " + ex_CryptographicException.Message); | |
} | |
catch (Exception ex) | |
{ | |
Debug.WriteLine("Error: " + ex.Message); | |
} | |
try | |
{ | |
cs.Close(); | |
} | |
catch (Exception ex) | |
{ | |
Debug.WriteLine("Error by closing CryptoStream: " + ex.Message); | |
} | |
finally | |
{ | |
fsOut.Close(); | |
fsCrypt.Close(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment