/// <summary> /// AESDecrypt /// </summary> /// <param name="input">待解密数据</param> /// <param name="key">密钥</param> /// <param name="kSize">密钥长度 default:8位</param> /// <returns></returns> public static string AESDecrypt(this string input, string key, KeySizeEnum kSize = KeySizeEnum.KEY16) { if (string.IsNullOrEmpty(input)) { return(string.Empty); } var decrypted = string.Empty; var dataBytes = Convert.FromBase64String(input.Replace(" ", "+")); var aes = _genAESProvider(key, kSize); var mStream = new MemoryStream(); var cStream = new CryptoStream(mStream, aes.CreateDecryptor(), CryptoStreamMode.Write); try { cStream.Write(dataBytes, 0, dataBytes.Length); cStream.FlushFinalBlock(); decrypted = Encoding.UTF8.GetString(mStream.ToArray()); } catch { return(string.Empty); } finally { mStream.Close(); cStream.Close(); aes.Clear(); } return(decrypted); }
/// <summary> /// _genAESProvider /// </summary> /// <param name="key">密钥</param> /// <param name="kSize">密钥长度 default:16位</param> /// <returns></returns> private static Rijndael _genAESProvider(string key, KeySizeEnum kSize) { Rijndael aesProvider = Rijndael.Create(); aesProvider.Mode = CipherMode.CBC; aesProvider.Padding = PaddingMode.PKCS7; aesProvider.KeySize = (int)kSize; aesProvider.BlockSize = (int)kSize; string strTemp; int keyLen = (int)kSize / 8; if (key.Length >= keyLen)//密钥长度足够 { strTemp = key.Substring(0, keyLen); } else//密钥程度不足,为其添加所需要的长度 { strTemp = key + key.Md5().Substring(0, keyLen - key.Length); } byte[] bytKey = Encoding.UTF8.GetBytes(strTemp); aesProvider.Key = bytKey; aesProvider.IV = bytKey; return(aesProvider); }