Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }