zoukankan      html  css  js  c++  java
  • DES字符串加(解)密代码实现

    private static byte[] Keys = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
            /// <summary> 
            /// DES加密字符串 
            /// </summary> 
            /// <param name="encryptString">待加密的字符串</param> 
            /// <param name="encryptKey">加密密钥,要求为16位</param> 
            /// <returns>加密成功返回加密后的字符串,失败返回源串</returns> 
    
            public static string EncryptDES(this string encryptString, string encryptKey)
            {
                try
                {
                    byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 16));
                    byte[] rgbIV = Keys;
                    byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
    
                    using (var DCSP = Aes.Create())
                    {
                        using (MemoryStream mStream = new MemoryStream())
                        {
                            using (CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write))
                            {
                                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                                cStream.FlushFinalBlock();
                                return Convert.ToBase64String(mStream.ToArray()).Replace('+', '_').Replace('/', '~');
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("密码加密异常" + ex.Message);
                }
    
            }
    
            /// <summary> 
            /// DES解密字符串 
            /// </summary> 
            /// <param name="decryptString">待解密的字符串</param> 
            /// <param name="decryptKey">解密密钥,要求为16位,和加密密钥相同</param> 
            /// <returns>解密成功返回解密后的字符串,失败返源串</returns> 
    
            public static string DecryptDES(this string decryptString, string decryptKey)
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 16));
                byte[] rgbIV = Keys;
                byte[] inputByteArray = Convert.FromBase64String(decryptString.Replace('_', '+').Replace('~', '/'));
                using (var DCSP = Aes.Create())
                {
                    using (MemoryStream mStream = new MemoryStream())
                    {
                        using (CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write))
                        {
                            byte[] inputByteArrays = new byte[inputByteArray.Length];
                            cStream.Write(inputByteArray, 0, inputByteArray.Length);
                            cStream.FlushFinalBlock();
                            return Encoding.UTF8.GetString(mStream.ToArray());
                        }
                    }
                }
    
            }
            public static bool TryDecryptDES(this string decryptString, string decryptKey, out string result)
            {
                result = "";
                try
                {
                    result = DecryptDES(decryptString, decryptKey);
                    return true;
                }
                catch
                {
                    return false;
                }
            }

     加密密钥和解密密钥要求一样,用控制台测试如下:

    string key = "451AEFBD6920AC271";
                string sec = "ID=sa;Password=123456;";
                string des = sec.EncryptDES(key);
                string final = des.DecryptDES(key);
                Console.WriteLine("加密前:"+sec+",加密后:"+des + ",解密后:" + final);
                Console.ReadLine();

    结果如下:

    记录编程的点滴,体会学习的乐趣
  • 相关阅读:
    lombok介绍
    idea 离线安装 lombok插件
    Java中Lambda表达式的使用
    接口里的default,static方法
    Maven多环境配置实战 filter
    redis lua脚本学习
    redis的安装
    jdbc插入或查询数据库时间总是比实际时间少8小时原因
    [设计模式]单件模式
    [设计模式]命令模式
  • 原文地址:https://www.cnblogs.com/AduBlog/p/13556963.html
Copyright © 2011-2022 走看看