zoukankan      html  css  js  c++  java
  • Des加解密算法

      class DesHelper
        {

            /// <summary>
            /// DES加密方法
            /// </summary>
            /// <param name="prestr">待加密的字符串</param>
            /// <param name="key">加密的密码(只能为8位长)</param>
            /// <param name="encoding">编码方式(默认为UTF-8)</param>
            /// <returns>加密结果</returns>
            public static string Encrypt(string prestr, string key, Encoding encoding = null)
            {
                encoding = encoding ?? Encoding.GetEncoding("UTF-8");
                //注意iv的长度,必须和key中的密码长度相同
                var iv = Encoding.ASCII.GetBytes(key);
                var keyArray = Encoding.ASCII.GetBytes(key);
                var datas = encoding.GetBytes(prestr);
                var desCryptoServiceProvider = new DESCryptoServiceProvider();
                using (var memoryStream = new MemoryStream())
                {
                    using (var cryptoStream = new CryptoStream(memoryStream, desCryptoServiceProvider.CreateEncryptor(iv, keyArray), CryptoStreamMode.Write))
                    {
                        cryptoStream.Write(datas, 0, datas.Length);
                        cryptoStream.FlushFinalBlock();

                        StringBuilder ret = new StringBuilder();
                        foreach (byte b in memoryStream.ToArray())
                        {
                            ret.AppendFormat("{0:X2}", b);//十六进制编码
                        }
                        return ret.ToString();
                    }
                }
            }

            /// <summary>
            /// DES 解密方法
            /// </summary>
            /// <param name="prestr">待加密的字符串</param>
            /// <param name="key">加密的密码(只能为8位长)</param>
            /// <param name="encoding">编码方式(默认为UTF-8)</param>
            /// <returns>加密之结果</returns>
            public static string Decrypt(string prestr, string key, Encoding encoding = null)
            {
                encoding = encoding ?? Encoding.GetEncoding("UTF-8");
                var iv = Encoding.ASCII.GetBytes(key);
                var keyArray = Encoding.ASCII.GetBytes(key);
                //把字符串放到byte数组中
                byte[] datas = new byte[prestr.Length / 2];
                for (int x = 0; x < prestr.Length / 2; x++)
                {
                    int i = (Convert.ToInt32(prestr.Substring(x * 2, 2), 16));
                    datas[x] = (byte)i;
                }
                var desCryptoServiceProvider = new DESCryptoServiceProvider();
                using (var memoryStream = new MemoryStream())
                {
                    using (var cryptoStream = new CryptoStream(memoryStream, desCryptoServiceProvider.CreateDecryptor(iv, keyArray), CryptoStreamMode.Write))
                    {
                        cryptoStream.Write(datas, 0, datas.Length);
                        cryptoStream.FlushFinalBlock();
                        return encoding.GetString(memoryStream.ToArray());
                    }
                }
            }
        }

  • 相关阅读:
    Java中类的继承
    信号量、PV原语及其应用
    Python-subprocess执行命令并将输出劫持实现实时记录到日志
    Python-logging模块定制格式描述符实现定长日志等级
    Python-logging模块实现同时向控制台和文件打印日志
    SpringBoot学习笔记(二)
    Kubernetes学习日记(四)
    Kubernetes学习日记(三)
    SpringBoot学习笔记(一)
    Kubernetes学习日记(二)
  • 原文地址:https://www.cnblogs.com/sk2016/p/6088237.html
Copyright © 2011-2022 走看看