login about faq

We have encrypted files (Encrypted with Chilkat AES Encryption)

We're trying to decrypt them now with native .NET and we've hit an odditiy:

this is the original file (between the --------- markers):

hello world

this is a demo for the encryption module

pretty please Work

3k more text data

With the Chilkat old VB6 code it decrypts fine:

Dim crypt As New ChilkatCrypt2
Dim bArr() As Byte

crypt.CryptAlgorithm = "aes"
crypt.CipherMode = "cbc"
crypt.KeyLength = 512

crypt.SetEncodedKey "#khRT>&Gl:]6nl:g;ED)@u5i]mBJFqI,a]m7-ZT2}kA7:BjvSh$PW(cFm[J7[%WX", "ascii"
crypt.SetEncodedIV  "$[Mcj&g]<[w3PHmQ;L-G-TfmjeI3nHqptRhbP7/FDY>T%KMytU*LYs:{2WQNS#Z*", "ascii"

bArr = crypt.DecryptBytesENC(Base64FileContent)

When I decrypt it using .Net the beginning of the file is wrong but the rest is perfectly fine First thing I found out is that there is no such thing as a keylength of 512. AES support sup to 256 So I had to be a bit creative and "crop" the KEY & IV values. However I Believe this happens as well in the chilkat implementation

AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
byte[] Key = {35,107,104,82,84,62,38,71,108,58,93,54,110,108,58,103,59,69,68,41,64,117,53,105,93,109,66,74,70,113,73,44};
byte[] IV = {36,91,77,99,106,38,103,93,60,91,119,51,80,72,109,81};
aes.KeySize = Key.Length*8;
aes.BlockSize = IV.Length*8;
aes.Mode = CipherMode.CBC;
aes.Key = Key;
aes.IV = IV;
//Any other Key or IV lenghts fail

string encodedFile = File.ReadAllText(sourceFilename);
byte[] encryptedString = Convert.FromBase64String(encodedFile);

ICryptoTransform transform = aes.CreateDecryptor(aes.Key, aes.IV);
        using (FileStream destination = new FileStream(destinationFilename, FileMode.CreateNew, FileAccess.Write, FileShare.None))
        {
            using (CryptoStream cryptoStream = new CryptoStream(destination, transform, CryptoStreamMode.Write))
            {
                try
                {
                    //using (FileStream source = new FileStream(sourceFilename2, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (MemoryStream source = new MemoryStream(encryptedString))
                    {
                        source.CopyTo(cryptoStream);
                    }
                }
                catch (CryptographicException exception)
                {
                    if (exception.Message == "Padding is invalid and cannot be removed.")
                        throw new ApplicationException("Universal Microsoft Cryptographic Exception (Not to be believed!)", exception);
                    else
                        throw;
                }
            }
        }

With this code it outputs: (there are non printable binary characters in the first line of the output) ------------- START ------------------ {F!bB((T{e his is a demo for the encryption module

pretty please Work

3k more text data perfectly decrypted

Anyone an idea?

asked Oct 13 '15 at 12:26

Bert%20Faes's gravatar image

Bert Faes
1

Be the first one to answer this question!
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or __italic__
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×33

Asked: Oct 13 '15 at 12:26

Seen: 407 times

Last updated: Oct 13 '15 at 12:26

powered by OSQA