I am attempting to use System.Security.Cryptography.AesManaged to encrypt a file in my .net application. It needs to be decrypted in an embedded Linux enviroment, so the .net libraries will not be available to me.
The code I have at the moment looks something like this:
string encPassword = "ABCDABCDABCDABCDABCDABCDABCDABCD"; string sourceFile = "myFile.txt"; string targetFile = "myFile.encrypted.txt"; FileStream fsInput = = new FileStream(sourceFile, FileMode.Open, FileAccess.Read); FileStream fsOutput = new FileStream(targetFile, FileMode.OpenOrCreate, FileAccess.Write); CryptoStream cryptoStream = null; try { byte[] key = Encoding.ASCII.GetBytes(encPasswd); byte[] IV = new byte[16]; Array.Copy(key, 0, IV, 0, 16); AesManaged aes = new AesManaged(); aes.Key = key; aes.IV = IV; aes.BlockSize = 128; aes.KeySize = 256; aes.Mode = CipherMode.CBC; ICryptoTransform encryptor = aes.CreateEncryptor(); cryptoStream = new CryptoStream(fsOutput, encryptor, CryptoStreamMode.Write); byte[] buffer = new byte[BUFFER_LENGTH]; long bytesProcessed = 0; long fileLength = fsInput.Length; int bytesInCurrentBlock; do { bytesInCurrentBlock = fsInput.Read(buffer, 0, BUFFER_LENGTH); cryptoStream.Write(buffer, 0, bytesInCurrentBlock); bytesProcessed = bytesProcessed + bytesInCurrentBlock; } while (bytesProcessed < fileLength); return true; } // ... This encrypts the file okay. Now I am trying to decrypt the file using a 3rd-party utility on Windows that is also supported in Linux, to give me confidence that the Linux developer will be able to decrypt it.
A quick search on SourceForge let me to Enqrypt. However, if I use Enqrypt on the encrypted file like this:
enqrypt.exe -d -aes -256 -cbc -k ABCDABCDABCDABCDABCDABCDABCDABCD myFile.encrypted.txt where -d indicates decrypt, -256 indicates the key size, -cbc the mode, and -k preceding the key.
it doesn't give me the original file.
I have tried this with a few 3rd party utilities but I can't seem to decrypt it.
Are there any obvious errors with how I am attempting to encrypt and decrypt this file?
Update
In response to recommendations from @Paŭlo, I now have the following test code (don't worry, I plan to change the key and IV to be different):
byte[] key = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; byte[] IV = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; The block size is still 128 and the key size is still 256 in code.
I now try to decrypt the file using openssl like so:
openssl enc -d -aes-256-cbc -in c:\encrypted.txt -out c:\decrypted.txt -K 11223344556677881122334455667788 -iv 11223344556677881122334455667788 This results in the following error:
bad decrypt 11452:error:06065064:digital envelope routines:EVP_DecryptFinal:bad decrypt:evp_enc.c:450: Any idea what I am doing wrong?
key,IVor both? Should the length of theIVbe the same as thekey?