国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

.Net(c#)加密解密之Aes和Des

2019-11-17 02:38:07
字體:
來源:轉載
供稿:網友
.Net(c#)加密解密之Aes和Des

.Net(c#)加密解密工具類:

/// <summary>/// .Net加密解密幫助類/// </summary>public class NetCryptoHelper{    #region des實現    /// <summary>    /// Des默認密鑰向量    /// </summary>    public static byte[] DesIv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };    /// <summary>    /// Des加解密鑰必須8位    /// </summary>    public const string DesKey = "deskey8w";    /// <summary>    /// 獲取Des8位密鑰    /// </summary>    /// <param name="key">Des密鑰字符串</param>    /// <returns>Des8位密鑰</returns>    static byte[] GetDesKey(string key)    {        if (string.IsNullOrEmpty(key))        {            throw new ArgumentNullException("key", "Des密鑰不能為空");        }        if (key.Length > 8)        {            key = key.Substring(0, 8);        }        if (key.Length < 8)        {            // 不足8補全            key = key.PadRight(8, '0');        }        return Encoding.UTF8.GetBytes(key);    }    /// <summary>    /// Des加密    /// </summary>    /// <param name="source">源字符串</param>    /// <param name="key">des密鑰,長度必須8位</param>    /// <param name="iv">密鑰向量</param>    /// <returns>加密后的字符串</returns>    public static string EncryptDes(string source, string key, byte[] iv)    {        using (DESCryptoServicePRovider desProvider = new DESCryptoServiceProvider())        {            byte[] rgbKeys = GetDesKey(key),                rgbIvs = iv,                inputByteArray = Encoding.UTF8.GetBytes(source);            using (MemoryStream memoryStream = new MemoryStream())            {                using (CryptoStream cryptoStream = new CryptoStream(memoryStream, desProvider.CreateEncryptor(rgbKeys, rgbIvs), CryptoStreamMode.Write))                {                    cryptoStream.Write(inputByteArray, 0, inputByteArray.Length);                    cryptoStream.FlushFinalBlock();                    // 1.第一種                    return Convert.ToBase64String(memoryStream.ToArray());                    // 2.第二種                    //StringBuilder result = new StringBuilder();                    //foreach (byte b in memoryStream.ToArray())                    //{                    //    result.AppendFormat("{0:X2}", b);                    //}                    //return result.ToString();                }            }        }    }    /// <summary>    /// Des解密    /// </summary>    /// <param name="source">源字符串</param>    /// <param name="key">des密鑰,長度必須8位</param>    /// <param name="iv">密鑰向量</param>    /// <returns>解密后的字符串</returns>    public static string DecryptDes(string source, string key, byte[] iv)    {        using (DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider())        {            byte[] rgbKeys = GetDesKey(key),                rgbIvs = iv,                inputByteArray = Convert.FromBase64String(source);            using (MemoryStream memoryStream = new MemoryStream())            {                using (CryptoStream cryptoStream = new CryptoStream(memoryStream, desProvider.CreateDecryptor(rgbKeys, rgbIvs), CryptoStreamMode.Write))                {                    cryptoStream.Write(inputByteArray, 0, inputByteArray.Length);                    cryptoStream.FlushFinalBlock();                    return Encoding.UTF8.GetString(memoryStream.ToArray());                }            }        }    }    #endregion    #region aes實現    /// <summary>    /// Aes加解密鑰必須32位    /// </summary>    public static string AesKey = "asekey32w";    /// <summary>    /// 獲取Aes32位密鑰    /// </summary>    /// <param name="key">Aes密鑰字符串</param>    /// <returns>Aes32位密鑰</returns>    static byte[] GetAesKey(string key)    {        if (string.IsNullOrEmpty(key))        {            throw new ArgumentNullException("key", "Aes密鑰不能為空");        }        if (key.Length < 32)        {            // 不足32補全            key = key.PadRight(32, '0');        }        if (key.Length > 32)        {            key = key.Substring(0, 32);        }        return Encoding.UTF8.GetBytes(key);    }    /// <summary>    /// Aes加密    /// </summary>    /// <param name="source">源字符串</param>    /// <param name="key">aes密鑰,長度必須32位</param>    /// <returns>加密后的字符串</returns>    public static string EncryptAes(string source, string key)    {        using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())        {            aesProvider.Key = GetAesKey(key);            aesProvider.Mode = CipherMode.ECB;            aesProvider.Padding = PaddingMode.PKCS7;            using (ICryptoTransform cryptoTransform = aesProvider.CreateEncryptor())            {                byte[] inputBuffers = Encoding.UTF8.GetBytes(source);                byte[] results = cryptoTransform.TransformFinalBlock(inputBuffers, 0, inputBuffers.Length);                aesProvider.Clear();                aesProvider.Dispose();                return Convert.ToBase64String(results, 0, results.Length);            }        }    }    /// <summary>    /// Aes解密    /// </summary>    /// <param name="source">源字符串</param>    /// <param name="key">aes密鑰,長度必須32位</param>    /// <returns>解密后的字符串</returns>    public static string DecryptAes(string source, string key)    {        using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())        {            aesProvider.Key = GetAesKey(key);            aesProvider.Mode = CipherMode.ECB;            aesProvider.Padding = PaddingMode.PKCS7;            using (ICryptoTransform cryptoTransform = aesProvider.CreateDecryptor())            {                byte[] inputBuffers = Convert.FromBase64String(source);                byte[] results = cryptoTransform.TransformFinalBlock(inputBuffers, 0, inputBuffers.Length);                aesProvider.Clear();                return Encoding.UTF8.GetString(results);            }        }    }    #endregion}

調試運行:

class Program{    static void Main(string[] args)    {        string plainText = "博客園",            encryptString = NetCryptoHelper.EncryptDes(plainText, NetCryptoHelper.DesKey, NetCryptoHelper.DesIv);        Console.WriteLine("des加密前的字符串:{0}", plainText);        Console.WriteLine("des加密后的字符串:{0}", encryptString);        Console.WriteLine("des解密后的字符串:{0}", NetCryptoHelper.DecryptDes(encryptString, NetCryptoHelper.DesKey, NetCryptoHelper.DesIv));        Console.WriteLine("-----------分割線-----------");        Console.WriteLine("aes加密前的字符串:{0}", plainText);        encryptString = NetCryptoHelper.EncryptAes(plainText, NetCryptoHelper.AesKey);        Console.WriteLine("aes加密后的字符串:{0}", encryptString);        Console.WriteLine("aes解密后的字符串:{0}", NetCryptoHelper.DecryptAes(encryptString, NetCryptoHelper.AesKey));        Console.ReadKey();    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙门县| 双牌县| 乐都县| 青冈县| 阿鲁科尔沁旗| 大悟县| 繁昌县| 那曲县| 应城市| 洛川县| 华蓥市| 辽阳县| 巧家县| 利辛县| 江津市| 哈巴河县| 茂名市| 信宜市| 图们市| 岱山县| 赣州市| 阳泉市| 电白县| 温宿县| 永康市| 梓潼县| 密云县| 东辽县| 遂川县| 运城市| 泰顺县| 屏山县| 资中县| 荣成市| 应城市| 武功县| 昆明市| 讷河市| 通许县| 竹北市| 横山县|