ASP.NET常用技术之加密解密

在开发项目中有许多数据需要我们进行加密解密操作,这里介绍几个加密解密的方法。

一:MD5加密

      MD5加密是一种单向的加密算法,它只能加密,加密后不能进行逆向解密操作,常用于数字签名和加密用户密码。

      下面利用C#实现MD5加密

       (1)返回base64形式的加密数据

private string MD5_Encrypt(string msg)
    {
        MD5 md5 = MD5.Create();
        byte[] data = Encoding.Default.GetBytes(msg); //待加密的字符串转成字节类型
        byte[] en_data = md5.ComputeHash(data, 0, data.Length);//加密
        return Convert.ToBase64String(en_data); //返回加密后数据的base64形式字符串
    }
View Code

        (2)返回16进制形式的数据

private string MD5_Encrypt(string msg)
    {
        MD5 md5 = MD5.Create();
        byte[] data = Encoding.Default.GetBytes(msg); //待加密的字符串转成字节类型
        byte[] en_data = md5.ComputeHash(data, 0, data.Length);//加密
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < en_data.Length; i++)
        {
            sb.Append(en_data[i].ToString("X2")); 
        }
        return sb.ToString();
    }
View Code

二:DES加密解密

      DES加密算法是一种对称的加密算法,对称加密指:加密和解密用同一组的钥匙。相对的 非对称加密算法加密密匙用一组,解密密匙用另一组。

      下面利用C#实现DES加密解密

      DES加密

private string DES_Encrypt(string msg,string key)
    {
        byte[] data = Encoding.Default.GetBytes(msg);//待加密的字符串转成字节类型
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        byte[] rgbKey=ASCIIEncoding.ASCII.GetBytes(key.PadRight(8,'a'));//密匙
        byte[] rgbIV = ASCIIEncoding.ASCII.GetBytes(key.PadRight(8,'a'));//向量
        des.Key = rgbKey;//设置密匙
        des.IV = rgbIV; //设置初始化向量
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);//定义加密转换流
        cs.Write(data, 0, data.Length); //加密数据写到内存流
        cs.FlushFinalBlock();
        return Convert.ToBase64String(ms.ToArray());//输出base64形式的加密字符串
    }
View Code

      DES解密

private string DES_Decrypt(string msg,string key)
    {
        byte[] data = Convert.FromBase64String(msg);
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        byte[] rgbKey = ASCIIEncoding.ASCII.GetBytes(key.PadRight(8, 'a'));//密匙
        byte[] rgbIV = ASCIIEncoding.ASCII.GetBytes(key.PadRight(8, 'a'));//向量
        des.Key = rgbKey;//设置密匙
        des.IV = rgbIV; //设置初始化向量
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(data, 0, data.Length); //解密数据并写到内存流
        return Encoding.Default.GetString(ms.ToArray());//将解密后字节数组转换成字符串
    }
View Code

     

原文地址:https://www.cnblogs.com/net-study/p/3645306.html