zoukankan      html  css  js  c++  java
  • DotNet中几种常用的加密算法

          在.NET项目中,我们较多的使用到加密这个操作。因为在现代的项目中,对信息安全的要求越来越高,那么多信息的加密就变得至关重要。现在提供几种常用的加密/解密算法。

      1.用于文本和Base64编码文本的互相转换 和 Byte[]和Base64编码文本的互相转换:

        (1).将普通文本转换成Base64编码的文本

           /// <summary>
            /// 将普通文本转换成Base64编码的文本
            /// </summary>
            /// <param name="value">普通文本</param>
            /// <returns></returns>
            public static string StringToBase64String(string value)
            {
                if (string.IsNullOrEmpty(value))
                {
                    throw new ArgumentNullException(value);
                }
                try
                {
                    var binBuffer = (new UnicodeEncoding()).GetBytes(value);
                    var base64ArraySize = (int)Math.Ceiling(binBuffer.Length / 3d) * 4;
                    var charBuffer = new char[base64ArraySize];
                    Convert.ToBase64CharArray(binBuffer, 0, binBuffer.Length, charBuffer, 0);
                    var s = new string(charBuffer);
                    return s;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
    
            }

       (2).将Base64编码的文本转换成普通文本

            /// <summary>
            /// 将Base64编码的文本转换成普通文本
            /// </summary>
            /// <param name="base64">Base64编码的文本</param>
            /// <returns></returns>
            public static string Base64StringToString(string base64)
            {
                if (string.IsNullOrEmpty(base64))
                {
                    throw new ArgumentNullException(base64);
                }
                try
                {
                    var charBuffer = base64.ToCharArray();
                    var bytes = Convert.FromBase64CharArray(charBuffer, 0, charBuffer.Length);
                    return (new UnicodeEncoding()).GetString(bytes);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

      (3).将Byte[]转换成Base64编码文本

            /// <summary>
            /// 将Byte[]转换成Base64编码文本
            /// </summary>
            /// <param name="binBuffer">Byte[]</param>
            /// <returns></returns>
            public string ToBase64(byte[] binBuffer)
            {
                if (binBuffer == null)
                {
                    throw new ArgumentNullException("binBuffer");
                }
                try
                {
                    var base64ArraySize = (int)Math.Ceiling(binBuffer.Length / 3d) * 4;
                    var charBuffer = new char[base64ArraySize];
                    Convert.ToBase64CharArray(binBuffer, 0, binBuffer.Length, charBuffer, 0);
                    var s = new string(charBuffer);
                    return s;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
    
            }

     (4).将Base64编码文本转换成Byte[]

           /// <summary>
            /// 将Base64编码文本转换成Byte[]
            /// </summary>
            /// <param name="base64">Base64编码文本</param>
            /// <returns></returns>
            public byte[] Base64ToBytes(string base64)
            {
                if (string.IsNullOrEmpty(base64))
                {
                    throw new ArgumentNullException(base64);
                }
                try
                {
                    var charBuffer = base64.ToCharArray();
                    var bytes = Convert.FromBase64CharArray(charBuffer, 0, charBuffer.Length);
                    return bytes;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

    2. DES加密/解密类。

      (1).加密

      private static readonly string KEY = "pengze0902";
    
            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="Text"></param>
            /// <returns></returns>
            public static string Encrypt(string Text)
            {
                return Encrypt(Text, KEY);
            }
            /// <summary> 
            /// 加密数据 
            /// </summary> 
            /// <param name="Text"></param> 
            /// <param name="sKey"></param> 
            /// <returns></returns> 
            public static string Encrypt(string Text, string sKey)
            {
                var des = new DESCryptoServiceProvider();
                var inputByteArray = Encoding.Default.GetBytes(Text);
                var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
                des.Key = bKey;
                des.IV = bKey;
                var ms = new System.IO.MemoryStream();
                var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                var ret = new StringBuilder();
                foreach (byte b in ms.ToArray())
                {
                    ret.AppendFormat("{0:X2}", b);
                }
                return ret.ToString();
            }

      (2).解密

       private static readonly string KEY = "pengze0902";
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="text"></param>
            /// <returns></returns>
            public static string Decrypt(string text)
            {
                return Decrypt(text, KEY);
            }
    
            /// <summary> 
            /// 解密数据 
            /// </summary> 
            /// <param name="text"></param> 
            /// <param name="sKey"></param> 
            /// <returns></returns> 
            public static string Decrypt(string text, string sKey)
            {
                var des = new DESCryptoServiceProvider();
                var len = text.Length / 2;
                byte[] inputByteArray = new byte[len];
                int x;
                for (x = 0; x < len; x++)
                {
                    var i = Convert.ToInt32(text.Substring(x * 2, 2), 16);
                    inputByteArray[x] = (byte)i;
                }
                var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
                des.Key = bKey;
                des.IV = bKey;
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                return Encoding.Default.GetString(ms.ToArray());
            }

     (3).取得MD5加密串

            //// <summary>
            /// 取得MD5加密串
            /// </summary>
            /// <param name="input">源明文字符串</param>
            /// <returns>密文字符串</returns>
            public static string Md5Hash(string input)
            {
                var md5 = new MD5CryptoServiceProvider();
                var bs = Encoding.UTF8.GetBytes(input);
                bs = md5.ComputeHash(bs);
                var s = new StringBuilder();
                foreach (var b in bs)
                {
                    s.Append(b.ToString("x2").ToUpper());
                }
                var password = s.ToString();
                return password;
            }

    3.MD5加密

       (1). 32位大写

            /// <summary>
            /// 32位大写
            /// </summary>
            /// <returns></returns>
            public static string Upper32(string s)
            {
                var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
                if (hashPasswordForStoringInConfigFile != null)
                    s = hashPasswordForStoringInConfigFile.ToString();
                return s.ToUpper();
            }

      (2). 32位小写

            /// <summary>
            /// 32位小写
            /// </summary>
            /// <returns></returns>
            public static string Lower32(string s)
            {
                var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
                if (hashPasswordForStoringInConfigFile != null)
                    s = hashPasswordForStoringInConfigFile.ToString();
                return s.ToLower();
            }

      (3).16位大写

            /// <summary>
            /// 16位大写
            /// </summary>
            /// <returns></returns>
            public static string Upper16(string s)
            {
                var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
                if (hashPasswordForStoringInConfigFile != null)
                    s = hashPasswordForStoringInConfigFile.ToString();
                return s.ToUpper().Substring(8, 16);
            }

     (4).16位小写

            /// <summary>
            /// 16位小写
            /// </summary>
            /// <returns></returns>
            public static string Lower16(string s)
            {
                var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
                if (hashPasswordForStoringInConfigFile != null)
                    s = hashPasswordForStoringInConfigFile.ToString();
                return s.ToLower().Substring(8, 16);
            }

    4.Sha1签名算法

            /// <summary>
            /// 签名算法
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static string GetSha1(string str)
            {
                if (string.IsNullOrEmpty(str))
                {
                    throw new ArgumentNullException(str);
                }
                try
                {
                    //建立SHA1对象
                    SHA1 sha = new SHA1CryptoServiceProvider();
                    //将mystr转换成byte[] 
                    var enc = new ASCIIEncoding();
                    var dataToHash = enc.GetBytes(str);
                    //Hash运算
                    var dataHashed = sha.ComputeHash(dataToHash);
                    //将运算结果转换成string
                    var hash = BitConverter.ToString(dataHashed).Replace("-", "");
                    return hash;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
    
            }

    5.Sha256加密算法

           /// <summary>
            /// 将字符串转换为sha256散列
            /// </summary>
            /// <param name="data">字符串进行转换</param>
            /// <returns>sha256散列或null</returns>
            public static string ToSha256(this string data)
            {
                try
                {
                    if (string.IsNullOrEmpty(data))
                        return null;
    
                    var hashValue = new SHA256Managed().ComputeHash(Encoding.UTF8.GetBytes(data));
                    var hex = hashValue.Aggregate("", (current, x) => current + String.Format("{0:x2}", x));
    
                    if (string.IsNullOrEmpty(hex))
                        throw new Exception("Erro creating SHA256 hash");
    
                    return hex;
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message, e);
                }
            }

       以上是一些较为常用的算法代码。

  • 相关阅读:
    jqGrid api 中文说明
    jsp + js + 前端弹出框
    js中关于带数字类型参数传参丢失首位数字0问题
    java中WGS84坐标(ios)转换BD-09坐标(百度坐标)
    Java中的“浅复制”与“深复制”
    Git错误:error:failed to push some refs to 'git@gitee.com:name/project.git'
    git操作教程
    线程调度及进程调度
    同步锁Lock
    多线程案例
  • 原文地址:https://www.cnblogs.com/pengze0902/p/5985093.html
Copyright © 2011-2022 走看看