• 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());
                    }
                }
            }
        }

  • 相关阅读:
    Asp.net_解决vs运行报在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题的bug方法
    WebConfig常用节点
    编译器错误消息:必须添加对程序集“System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用
    使用Log4net调试NHibernate
    Visual Studio 2012 如何打开MVC1.0 MVC2.0的项目
    MVC中IQueryable与IList的区别?
    vs2010 打开 vs2012 的解决方案
    LINQ分页和排序,skip和Take 用法
    未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
    在Sql server数据库中,关于触发器的创建、调用及删除
  • 原文地址:https://www.cnblogs.com/sk2016/p/6088237.html
Copyright © 2020-2023  润新知