- public static class AESCryptoProvider
- {
- public const string guid = "46d2e413-a154-4521-87de-e45066216bfe";
- /// <summary>
- /// AES加密
- /// </summary>
- /// <param name="Data">被加密的明文</param>
- /// <param name="Key">密钥</param>
- /// <param name="Vector">向量</param>
- /// <returns>密文</returns>
- public static string Encrypt(string Data, String Key = guid, String Vector = guid)
- {
- var _data = Encoding.Unicode.GetBytes(Data);
- Byte[] bKey = new Byte[32];
- Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
- Byte[] bVector = new Byte[16];
- Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
- Byte[] Cryptograph = null; // 加密后的密文
- Rijndael Aes = Rijndael.Create();
- try
- {
- // 开辟一块内存流
- using (MemoryStream Memory = new MemoryStream())
- {
- // 把内存流对象包装成加密流对象
- using (CryptoStream Encryptor = new CryptoStream(Memory,
- Aes.CreateEncryptor(bKey, bVector),
- CryptoStreamMode.Write))
- {
- // 明文数据写入加密流
- Encryptor.Write(_data, 0, _data.Length);
- Encryptor.FlushFinalBlock();
- Cryptograph = Memory.ToArray();
- }
- }
- }
- catch
- {
- Cryptograph = null;
- }
- return Convert.ToBase64String(Cryptograph);
- }
- /// <summary>
- /// AES解密
- /// </summary>
- /// <param name="Data">被解密的密文</param>
- /// <param name="Key">密钥</param>
- /// <param name="Vector">向量</param>
- /// <returns>明文</returns>
- public static string Decrypt(string Data, String Key = guid, String Vector = guid)
- {
- Byte[] bKey = new Byte[32];
- Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
- Byte[] bVector = new Byte[16];
- Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
- UnicodeEncoding ByteConverter = new UnicodeEncoding();
- Byte[] original = null; // 解密后的明文
- Rijndael Aes = Rijndael.Create();
- try
- {
- // 开辟一块内存流,存储密文
- using (MemoryStream Memory = new MemoryStream(Convert.FromBase64String(Data)))
- {
- // 把内存流对象包装成加密流对象
- using (CryptoStream Decryptor = new CryptoStream(Memory,
- Aes.CreateDecryptor(bKey, bVector),
- CryptoStreamMode.Read))
- {
- // 明文存储区
- using (MemoryStream originalMemory = new MemoryStream())
- {
- Byte[] Buffer = new Byte[1024];
- Int32 readBytes = 0;
- while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
- {
- originalMemory.Write(Buffer, 0, readBytes);
- }
- original = originalMemory.ToArray();
- }
- }
- }
- }
- catch
- {
- original = null;
- }
- return ByteConverter.GetString(original);
- }
- /// <summary>
- /// AES解密
- /// </summary>
- /// <param name="Data">被解密的密文</param>
- /// <param name="Key">密钥</param>
- /// <param name="Vector">向量</param>
- /// <returns>明文</returns>
- public static string Decrypt_js(string toDecrypt, string key, string iv)
- {
- byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
- byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
- byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
- RijndaelManaged rDel = new RijndaelManaged();
- rDel.Key = keyArray;
- rDel.IV = ivArray;
- rDel.Mode = CipherMode.CBC;
- rDel.Padding = PaddingMode.Zeros;
- ICryptoTransform cTransform = rDel.CreateDecryptor();
- byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
- return UTF8Encoding.UTF8.GetString(resultArray);
- }
- /// <summary>
- /// AES加密
- /// </summary>
- /// <param name="Data">被加密的明文</param>
- /// <param name="Key">密钥</param>
- /// <param name="Vector">向量</param>
- /// <returns>密文</returns>
- public static string Encrypt_js(string toEncrypt, string key, string iv)
- {
- byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
- byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
- byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
- RijndaelManaged rDel = new RijndaelManaged();
- rDel.Key = keyArray;
- rDel.IV = ivArray;
- rDel.Mode = CipherMode.CBC;
- rDel.Padding = PaddingMode.Zeros;
- ICryptoTransform cTransform = rDel.CreateEncryptor();
- byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
- return Convert.ToBase64String(resultArray, 0, resultArray.Length);
- }
- }
复制代码
|