views:

518

answers:

3

I am trying to share encryption between Action Script and C#

My task is to decrypt the following message within C#

f1ca22a365ba54c005c3eb599d84b19c354d26dcf475ab4be775b991ac97884791017b12471000def05bb77bfe9c3a97d44ef78c9449f12daf6e25b61ab1a281

It uses Rijndael encyption , ECB mode (electronic code book), Key: Pas5pr@se , 128 bit key size and block size.

The problem I have is I can't seem to do it, anyone help me on this?

+3  A: 

This is an implementation of Rijndael Encryption which one of my websites is currently using. See if this does the trick:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace CMS.Core.Domain
{
    /// <summary>
    /// Summary description for EncryptionManager
    /// </summary>
    public static class EncryptionManager
    {
        public static string EncryptRijndael(string value, string encryptionKey) {
            try {
                var key = Encoding.UTF8.GetBytes(encryptionKey); //must be 16 chars
                var rijndael = new RijndaelManaged {
                    BlockSize = 128,
                    IV = key,
                    KeySize = 128,
                    Key = key
                };

                var transform = rijndael.CreateEncryptor();
                using (var ms = new MemoryStream()) {
                    using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Write)) {
                        byte[] buffer = Encoding.UTF8.GetBytes(value);

                        cs.Write(buffer, 0, buffer.Length);
                        cs.FlushFinalBlock();
                        cs.Close();
                    }
                    ms.Close();
                    return Convert.ToBase64String(ms.ToArray());
                }
            }
            catch {
                return string.Empty;
            }
        }

        public static string DecryptRijndael(string value, string encryptionKey)
        {
            try
            {
                var key = Encoding.UTF8.GetBytes(encryptionKey); //must be 16 chars
                var rijndael = new RijndaelManaged
                                               {
                                                   BlockSize = 128,
                                                   IV = key,
                                                   KeySize = 128,
                                                   Key = key
                                               };

                var buffer = Convert.FromBase64String(value);
                var transform = rijndael.CreateDecryptor();
                string decrypted;
                using (var ms = new MemoryStream())
                {
                    using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
                    {
                        cs.Write(buffer, 0, buffer.Length);
                        cs.FlushFinalBlock();
                        decrypted = Encoding.UTF8.GetString(ms.ToArray());
                        cs.Close();
                    }
                    ms.Close();
                }

                return decrypted;
            }
            catch
            {
                return null;
            }
        }
    }
}

Update

One thing I just noticed with your input is that your encryption key is only 9 characters and my code above requires a 16 character key. I am not sure if this is a hard requirement of the Rijndael encryption algorithm, but the above code will not work with an encryption key that is not exactly 16 characters.

Nathan Taylor
Your process looks simple and it works within C#, just can't get the Action Script to send or receive anything
Coppermill
Not sure how to help you with the ActionScript aspect of your question, but if this was at least somewhat helpful please vote. :)
Nathan Taylor
A: 

I came across this link which addresses both C# and ActionScript for the AES Rijndael encryption

http://ryoushin.com/cmerighi/en-us/42,2007-03-02/AES-Rijndael_with_ActionScript_and_ASP_Net.aspx

Coppermill
A: 

You could try this wrapper for Rijndael as it may be an issue with the IV or the passphrase padding (I'd be interested to know if it doesn't work)

Chris S
C# is easy to code for, it's the ActionScript that is causing the bigger issue
Coppermill