Hi Kaleb

Thanks for the example. I'll give it a try.

regards
Bod


--- In [email protected], "kaleb_pederson" 
<[EMAIL PROTECTED]> wrote:
>
> I wrote one up for testing earlier, so I'll post it below.  It's a 
> bit long, and definitely not well structured, but it does work.
> 
> As C# uses Rijndael, you'll need to make sure to restrict it to 
> something that will work with the actionscript version.  
> Specifically, the block size must be 128.  The key size can be 
128, 
> 192, or 256.
> 
> It actually doesn't look like they (c# and Hurlant's crypto lib) 
> have matching padding schemes, but that's easy to fix.  Here's 
some 
> ActionScript code that implements (I hope -- untested) the zero's 
> padding scheme, which is probably the least secure of them, but is 
> the easiest implement:
> 
> package com.hurlant.crypto.symmetric
> {
>     import flash.utils.ByteArray;
>     
>     public class ZeroPad implements IPad
>     {
>         private var blockSize:uint;
>         
>         public function PKCS5(blockSize:uint=0) {
>             this.blockSize = blockSize;
>         }
>         
>         public function pad(a:ByteArray):void {
>             var c:uint = blockSize-a.length%blockSize;
>             for (var i:uint=0;i<c;i++){
>                 a[a.length] = 0;
>             }
>         }
>         public function unpad(a:ByteArray):void {
>             var c:uint = a.length%blockSize;
>             if (c!=0) throw new Error("ZeroPad::unpad: 
> ByteArray.length isn't a multiple of the blockSize");
>             c = a.length-1;
>             while (a[c] == 0) {
>                a.length--;
>                c--;
>             }
>         }
> 
>         public function setBlockSize(bs:uint):void {
>             blockSize = bs;
>         }
> 
>     }
> }
> 
> That's about it for the actionscript part.  If the above items 
> match, everything should work great for you.
> 
> Details about the padding scheme's are here:
> 
> http://technet.microsoft.com/en-
us/library/system.security.cryptography.paddingmode(VS.80).aspx
> 
> I would recommend implementing the ISO10126 padding scheme as it's 
> going to be the most secure.
> 
> And here's the more offtopic piece:
> 
> using System;
> using System.Collections.Generic;
> using System.Text;
> using System.Security.Cryptography;
> using System.IO;
> 
> namespace AesTest
> {
>     class Program
>     {
>         static string getStringRep(byte[] arr)
>         {
>             string result = "";
>             for (int i = 0; i < arr.Length; i++)
>             {
>                 result += arr[i].ToString("x2");
>             }
>             return result;
>         }
> 
>         static void Main(string[] args)
>         {
>             RijndaelManaged aes = new RijndaelManaged();
> 
>             byte[] key = { 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 
0x12, 
> 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 
> 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 
> 0x34, 0x12, 0x34 };
>             byte[] IV = { 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 
0x12, 
> 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34 };
> 
>             byte[] ciphertext;
>             byte[] plaintext_output;
>             byte[] plaintext = { 0x12, 0x34, 0x12, 0x34, 0x12, 
0x34, 
> 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34 };
> 
>             // set the various parameters
>             // 1) make sure it's compatible with AES which 
requires 
> 128 bit block sizes
>             // 2) key size can be 128, 192, or 256 (automatically 
> detected when setting the key)
>             // 3) Set the padding mode to something useful 
> (ANSIX923, ISO10126, None, PKCS7, Zeros)
>             aes.BlockSize = 128;
>             aes.KeySize = 256;
>             aes.Mode = CipherMode.CBC;
>             aes.Padding = PaddingMode.ANSIX923;
>             aes.Key = key;
>             aes.IV = IV;
> 
>             // Create an encryptor object
>             ICryptoTransform encryptor = aes.CreateEncryptor(key, 
> IV);
> 
>             // Encrypt the data
>             MemoryStream msEncrypt = new MemoryStream();
>             CryptoStream csEncrypt = new CryptoStream(msEncrypt, 
> encryptor, CryptoStreamMode.Write);
> 
>             // Write all data to the crypto stream and flush it.
>             csEncrypt.Write(plaintext, 0, plaintext.Length);
>             csEncrypt.FlushFinalBlock();
> 
>             // Get ciphertext array of bytes.
>             ciphertext = msEncrypt.ToArray();
> 
>             // purposefully change the padding mode so that I can 
> see what actually
>             // the actual padding bits were
>             aes.Padding = PaddingMode.None;
> 
>             // create a decryption stream
>             CryptoStream csDecrypt = new CryptoStream(
>                 new MemoryStream(ciphertext),
>                 aes.CreateDecryptor(),
>                 CryptoStreamMode.Read);
> 
>             plaintext_output = new byte[ciphertext.Length];
> 
>             // Read the data out of the crypto stream.
>             csDecrypt.Read(plaintext_output, 0, 
> plaintext_output.Length);
> 
>             // Display the original data and the decrypted data.
>             Console.WriteLine("Original:   {0}", 
> getStringRep(plaintext));
>             Console.WriteLine("Ciphertext: {0}", 
> getStringRep(ciphertext));
>             Console.WriteLine("Round Trip: {0}", 
> getStringRep(plaintext_output));
>         }
>     }
> }
> 
> I hope that helps.
> 
> --Kaleb
> 
> 
> 
> --- In [email protected], "bhaq1972" <mbhaque@> wrote:
> >
> > Hi Kaleb (or anyone else)
> > 
> > This is slightly off topic but can you point me to a c# example 
> that 
> > works with Metal Hurlat. 
> > 
> > thanks
> > Bod
>


Reply via email to