views:

431

answers:

5

Hi all,

All the samples for Rijndael algorithm are defining the key from the Rijndael class itself, can't we provide the Key of our own. Any hint on this will help me a lot.

The sample application we are creating is for windows mobile and it doesn't support PasswordDeriveBytes

Thanks in advance Geetha

Update on this topic: As per the code sample provided below, we have tried it and it seems to be working but there is a small hiccup in this. when we decrypt the data there is a 8 bit padding up on the right side of the value for the example, we are encrypting a Unique key for transaction and it looks like this :

Before encryption: MI03112009044625000000000000008024754008

After Decryption: MI03112009044625000000000000008024754008揞⑁㋬㓠⥳空⠜資

can anyone help on this right padding happening in the original value.

thanks Geetha

A: 

Check this example: http://www.codeproject.com/KB/security/DotNetCrypto.aspx

Groo
+2  A: 

The key property of the Rijndael instance takes a byte[] as the key. Make sure you set it to an array with a valid size for the algorithm.

Link to msdn: http://msdn.microsoft.com/en-us/library/system.security.cryptography.symmetricalgorithm.key.aspx

Oscar Kilhed
A: 

What do you mean by cannot provide the key of our own? Here's an example on how you do it.

public static string Encrypt(string Text, byte[] key, byte[] VectorBytes){
    try{
        byte[] TextBytes = Encoding.UTF8.GetBytes(Text);        
        RijndaelManaged rijKey = new RijndaelManaged();
        rijKey.Mode = CipherMode.CBC; 
        ICryptoTransform encryptor = rijKey.CreateEncryptor(key,VectorBytes); 
        MemoryStream memoryStream = new MemoryStream(); 
        cryptoStream.Write(TextBytes, 0, TextBytes.Length); 
        cryptoStream.FlushFinalBlock(); 
        byte[] cipherTextBytes = memoryStream.ToArray();
        memoryStream.Close();
        cryptoStream.Close(); 
        string cipherText = Convert.ToBase64String(cipherTextBytes); 
        return cipherText;
    } 
    catch (Exception e){
        MessageBox.Show("Falsches Passwort "+ e.Message.ToString());
        string t = "";
        return t;
    }
}
Ngu Soon Hui
Why the downvote?
Ngu Soon Hui
A: 

hi thanks for the sample but its using PasswordDeriveBytes class which can't be used in Microsoft Compact Framework.

Geetha
Can you use edit to further enhance the question?
Ngu Soon Hui
Yes i did that too. Thank you for correcting my mistake
Geetha
if i use edit option i didn't get reply
Geetha
A: 

You can try something like this, based on the RijndaelManaged Class MSDN article that I also recommend you to read.

string plainText = "This will be encrypted.";
RijndaelManaged aesAlg = new RijndaelManaged();
aesAlg.Key = new byte[32] { 118, 123, 23, 17, 161, 152, 35, 68, 126, 213, 16, 115, 68, 217, 58, 108, 56, 218, 5, 78, 28, 128, 113, 208, 61, 56, 10, 87, 187, 162, 233, 38 };
aesAlg.IV = new byte[16] { 33, 241, 14, 16, 103, 18, 14, 248, 4, 54, 18, 5, 60, 76, 16, 191};
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

msEncrypt = new MemoryStream();
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) {
    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) {
        swEncrypt.Write(plainText);
    }
}

return msEncrypt.ToArray();
Jonas Elfström