Base64、AES、MD5、HMACSHA256的加密解密

/// <summary>
        /// Base64加密
        /// </summary>
        /// <param name="source">待加密的明文</param>
        /// <param name="encode">编码方式</param>
        /// <returns></returns>
        public static string EncodeBase64(string source, Encoding encode)
        {
            byte[] bytes = encode.GetBytes(source);
            return Convert.ToBase64String(bytes);
        }
 
        /// <summary>
        /// Base64加密
        /// </summary>
        /// <param name="source">待加密的明文</param>
        /// <returns></returns>
        /// 
        /// <seealso cref="SecurityUtil.EncodeBase64(string,Encoding)">  
        /// 参看SecurityUtil.EncodeBase64(string,Encoding)方法的说明 </seealso>  
        public static string EncodeBase64(string source)
        {
            return EncodeBase64(source, Encoding.UTF8);
        }
 
        /// <summary>
        /// Base64解密
        /// </summary>
        /// <param name="source">待解密的明文</param>
        /// <param name="encode">编码方式</param>
        /// <returns></returns>
        public static string DecodeBase64(string source, Encoding encode)
        {
            string decode = "";
            byte[] bytes = Convert.FromBase64String(source);
            decode = encode.GetString(bytes);
            return decode;
        }
 
        /// <summary>
        /// AES加密 
        /// </summary>
        /// <param name="context">待加密的内容</param>
        /// <param name="keyBytes">加密密钥</param>
        /// <param name="keySize"></param>
        /// <param name="blockSize"></param>
        /// <param name="ivBytes"></param>
        /// <returns></returns>
        public static string AESEncrypt(string context, byte[] keyBytes,int keySize,int blockSize,byte[] ivBytes)
        {
            RijndaelManaged rijndaelCipher = new RijndaelManaged();
 
            rijndaelCipher.Mode = CipherMode.CBC;
            rijndaelCipher.Padding = PaddingMode.PKCS7;
            rijndaelCipher.KeySize = keySize;
            rijndaelCipher.BlockSize = blockSize;
 
 
            // 加密密钥
            rijndaelCipher.Key = keyBytes;
            rijndaelCipher.IV = ivBytes;
 
            ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
 
            byte[] plainText = Encoding.UTF8.GetBytes(context);
            byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);
            return Convert.ToBase64String(cipherBytes);
        }
 
        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="context"></param>
        /// <param name="keyBytes"></param>
        /// <param name="keySize"></param>
        /// <param name="blockSize"></param>
        /// <param name="ivBytes"></param>
        /// <returns></returns>
        public static string AESDecrypt(string context, byte[] keyBytes, int keySize, int blockSize, byte[] ivBytes)
        {
            RijndaelManaged rijndaelCipher = new RijndaelManaged();
 
            rijndaelCipher.Mode = CipherMode.CBC;
            rijndaelCipher.Padding = PaddingMode.PKCS7;
            rijndaelCipher.KeySize = keySize;
            rijndaelCipher.BlockSize = blockSize;
 
            byte[] encryptedData = Convert.FromBase64String(context);
            rijndaelCipher.Key = keyBytes;
            rijndaelCipher.IV = ivBytes;
 
            ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
 
            byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
            return Encoding.UTF8.GetString(plainText);
        }
 
        //16位加密
        /// <summary>
        /// MD516位加密
        /// </summary>
        /// <param name="encryptData">待加密的数据</param>
        /// <param name="encodingType">编码方式</param>
        /// <returns></returns>
        public static string Encrypt16(string encryptData, Encoding encodingType)
        {
            byte[] bEncrypt = encodingType.GetBytes(encryptData);
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string t2 = BitConverter.ToString(md5.ComputeHash(bEncrypt, 4, 8));
            t2 = t2.Replace("-", "");
            return t2;
        }
 
        //32位加密
        /// <summary>
        /// MD532位加密(大写)
        /// </summary>
        /// <param name="encryptData">待加密的数据</param>
        /// <param name="encodingType">编码方式</param>
        /// <returns></returns>
        public static string Encrypt32(string encryptData, Encoding encodingType)
        {
            byte[] bEncrypt = encodingType.GetBytes(encryptData);
            byte[] bComputeHash = MD5.Create().ComputeHash(bEncrypt);
            StringBuilder sb = new StringBuilder();
            foreach (byte item in bComputeHash)
            {
                sb.Append(item.ToString("X2"));
            }
            return sb.ToString();
        }
 
 
 
        //32位加密
        /// <summary>
        /// MD532位加密(小写)
        /// </summary>
        /// <param name="encryptData">待加密的数据</param>
        /// <param name="encodingType">编码方式</param>
        /// <returns></returns>
        public static string Encrypt32Lower(string encryptData, Encoding encodingType)
        {
            byte[] bEncrypt = encodingType.GetBytes(encryptData);
            byte[] bComputeHash = MD5.Create().ComputeHash(bEncrypt);
            StringBuilder sb = new StringBuilder();
            foreach (byte item in bComputeHash)
            {
                sb.Append(item.ToString("x2"));
            }
            return sb.ToString();
        }
 
        //64位加密
        /// <summary>
        /// MD564位加密
        /// </summary>
        /// <param name="encryptData">待加密的数据</param>
        /// <param name="encodingType">编码方式</param>
        /// <returns></returns>
        public static string Encrypt64(string encryptData, Encoding encodingType)
        {
            byte[] bEncrypt = encodingType.GetBytes(encryptData);
            //string pwd = "";
            MD5 md5 = MD5.Create(); //实例化一个md5对像
            // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
            byte[] s = md5.ComputeHash(bEncrypt);
            return Convert.ToBase64String(s);
        }
 
        /// <summary>
        /// 字符串 str 按照简体中文(ASCIIEncoding.ASCII)的编码方式
        /// </summary>
        /// <param name="encodingData">待编码的内容</param>
        /// <returns></returns>
        public static byte[] GetBytesByASCIIEncoding(string encodingData) {
            return ASCIIEncoding.ASCII.GetBytes(encodingData);
        }
 
        public static byte[] GetSHA1HashBytes(byte[] encryptData) {
           return new SHA1CryptoServiceProvider().ComputeHash(encryptData);
        }
 
        /// <summary>
        /// HmacSHA256加密64位
        /// </summary>
        /// <param name="message">待加密内容</param>
        /// <param name="secret">加密密钥</param>
        /// <returns></returns>
        public static string HmacSHA256Encrypt64(string message,string secret) {
            return HmacSHA256Encrypt64(message,secret,new System.Text.ASCIIEncoding());
        }
 
        /// <summary>
        /// HmacSHA256加密64位
        /// </summary>
        /// <param name="message">待加密内容</param>
        /// <param name="secret">加密密钥</param>
        /// <param name="encoding">编码方式</param>
        /// <returns></returns>
        public static string HmacSHA256Encrypt64(string message, string secret,Encoding encoding)
        {
            secret = secret ?? "";
            byte[] keyByte = encoding.GetBytes(secret);
            byte[] messageBytes = encoding.GetBytes(message);
            using (var hmacsha256 = new HMACSHA256(keyByte))
            {
                byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
                return Convert.ToBase64String(hashmessage);
            }
        }

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AES CBC 128 HMACSHA256是一种在线加密解密方法,用于保护数据的安全性。它使用了两个不同的算法来实现加密和认证。 AES(Advanced Encryption Standard)是一种对称加密算法,使用相同的密钥来进行加密和解密。它使用128位密钥来保护数据的机密性。采用CBC(Cipher Block Chaining)模式,它将每个明文块与前一个密文块进行XOR操作,增加了数据的随机性,增加了加密算法的安全性。 HMACSHA256(Hash-based Message Authentication Code with Secure Hash Algorithm 256)是一种基于哈希函数的消息认证码算法,用于对数据进行认证。它使用SHA256(Secure Hash Algorithm 256)生成散列值,并将散列值与密钥进行组合计算,生成用于认证的消息认证码,以确保数据的完整性和认证性。 在实际应用中,使用AES CBC 128 HMACSHA256进行加密解密操作时,首先使用AES CBC 128算法对明文进行加密,生成密文。然后,通过计算HMACSHA256来生成消息认证码,并将其与密文一起传输或存储。在解密过程中,首先对密文进行解密,然后再次计算HMACSHA256,将结果与接收到的消息认证码进行比较,以验证数据的完整性和认证性。 综上所述,AES CBC 128 HMACSHA256在线加密解密方法可以同时确保数据的机密性和完整性。通过AES CBC算法提供加密功能,保护数据的机密性,而HMACSHA256算法则用于认证数据的完整性和认证性。这种方法广泛应用于各种领域,如保护敏感信息的传输和存储,确保数据的安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值