Hi. I'm trying to figure out how to use AES encyption and decryption using the DecryptionKey in the MachineKey. I think I'm on the right track, but I don't know how to get a proper Key and IV from the DecryptionKey to set in my Rijndael manager.
Here is my web config:
<
machineKey validationKey="3EF4FE4BD3F9A1CA4F293F521B8E3F492ED855FA4029511934BF221FCE80AE6A13252ED080EE6423A69EC96A3AB6E8F6E3A1B90AE70C97CC3C33FD4E51041879" decryption="AES" decryptionKey="D2B115C0460D0DA0F84A4DC2713435A3B4C49C734E1D7E33" validation="AES"/>
My "Rijndael Manager" is below. Here is what I'm stuck on right now. I know this Manager class works great if I create a seperate Key and IV in my webconfig that looks like this (actually those are 256 bit not 128 as the class below shows).
<
add key="Key" value="JQZqQLLTQ+yV3jfvwPK7PXlJEiKQqDA9bld/ePSyx+E="/>
<add key="IV" value="P1I/4wNHVbpM4/o7DwuCi83YAfOLpBwJyPBVkvRX7vs="/>
BUT, the problem with this is if I do that, I'm using two different keys for encryption- one for Membership and one with my own Rijnadael manager. I want to use the same shared DecrytpionKey in the MachineConfig for ALL of my encryption.
This is what I normally do:
RijndaelManagedManager cipherManager =
new RijndaelManagedManager (Convert.FromBase64String(ConfigurationManager.AppSettings.Get("Key")), Convert.FromBase64String(ConfigurationManager.AppSettings.Get("IV")));
This is what I WANT to do, using the DecryptKey.
RijndaelManagedManager cipherManager = new RijndaelManagedManager();
cipherManager.IV = ??? Get me from the Machine Key Please!
cipherManager.Key = ??? Get e from the Machine Key Please!
THANK YOU in advance for any help you can give me.
--Tom
____________________________________________________________________
using
System.Security.Cryptography;
namespace
DOR.Security.Cryptography
/// <summary>
/// Manages simple encrypt and decrypt functions using the RijndaelManaged provider
/// </summary>
public class RijndaelManagedManager
{
RijndaelManaged _cipher = null;
/// <summary>
/// Empty constructor
/// </summary>public RijndaelManagedManager()
{
_cipher = InitCipher();
}
/// <summary>
/// Pass key and iv to use in operations
/// </summary>
/// <param name="key"></param>
/// <param name="iv"></param>public RijndaelManagedManager(byte[] key, byte[] iv)
{
_cipher = InitCipher(key, iv);
}
/// <summary>
///
/// </summary>public byte[] Key
{
get { return _cipher.Key; }set { _cipher.Key = value; }
}
/// <summary>
///
/// </summary>public byte[] IV
{
get { return _cipher.IV; }set { _cipher.IV = value; }
}
/// <summary>
/// Encrypt the passed byte array
/// </summary>
/// <param name="plainText"></param>
/// <returns></returns>public byte[] Encrypt(byte[] plainText)
{
ICryptoTransform transform = _cipher.CreateEncryptor();
byte[] cipherText = transform.TransformFinalBlock(plainText, 0, plainText.Length);return cipherText;
}
/// <summary>
/// Decrypt the passed byte array
/// </summary>
/// <param name="cipherText"></param>
/// <returns></returns>public byte[] Decrypt(byte[] cipherText)
{
ICryptoTransform transform = _cipher.CreateDecryptor();
byte[] plainText = transform.TransformFinalBlock(cipherText, 0, cipherText.Length);return plainText;
}
private RijndaelManaged InitCipher()
{
RijndaelManaged cipher = CreateCipher();
cipher.GenerateKey();
cipher.GenerateIV();
return cipher;
}
private RijndaelManaged InitCipher(byte[] key, byte[] iv)
{
RijndaelManaged cipher = CreateCipher();
cipher.Key = key;
cipher.IV = iv;
return cipher;
}
private RijndaelManaged CreateCipher()
{
RijndaelManaged cipher = new RijndaelManaged();
cipher.KeySize = 128;
cipher.BlockSize = 128;
cipher.Mode = CipherMode.CBC;
cipher.Padding =
PaddingMode.ISO10126;return cipher;
}
}
}