zoukankan      html  css  js  c++  java
  • .NET 常用加密、解密& 数字签名算法

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Security.Cryptography;
    using System.Text;
    
    //xlding, 2013/07/25
    
    namespace Gemr.Utils
    {
        public class CommonAlgorithms
        {
            #region Sort
    
            public static string[] BubbleSort(string[] array)
            {
                int length = array.Length;
                for (int i = 0; i <= length - 1; i++)
                {
                    for (int j = length - 1; j > i; j--)
                    {
                        if (array[j].CompareTo(array[j - 1]) < 0)
                        {
                            string temp = array[j];
                            array[j] = array[j - 1];
    
                            array[j - 1] = temp;
                        }
                    }
                }
                return array;
            }
    
            #endregion Sort
    
            private static char[] constant =
            {
                'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
                'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
            };
    
            public byte[] ConvertStringToByteArray(string str)
            {
                if (string.IsNullOrEmpty(str)) return null;
    
                byte[] byteArray = System.Text.Encoding.Default.GetBytes(str);
    
                return byteArray;
    
            }
    
            public static string GenerateRandom(int Length)
            {
                System.Text.StringBuilder newRandom = new System.Text.StringBuilder(52);
                Random rd = new Random();
                for (int i = 0; i < Length; i++)
                {
                    newRandom.Append(constant[rd.Next(52)]);
                }
                return newRandom.ToString();
            }
    
            /// <summary>
            /// Put the object serialization for byte array
            /// </summary>
            public static byte[] SerializeObject(object obj)
            {
                if (obj == null)
                    return null;
                MemoryStream ms = new MemoryStream();
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(ms, obj);
                ms.Position = 0;
                byte[] bytes = new byte[ms.Length];
                ms.Read(bytes, 0, bytes.Length);
                ms.Close();
                return bytes;
            }
    
            /// <summary>
            /// Byte array reverse serialized into object
            /// </summary>
            public static object DeserializeObject(byte[] bytes)
            {
                object obj = null;
                if (bytes == null)
                    return obj;
                MemoryStream ms = new MemoryStream(bytes);
                ms.Position = 0;
                BinaryFormatter formatter = new BinaryFormatter();
                obj = formatter.Deserialize(ms);
                ms.Close();
                return obj;
            }
    
            public static string ConvertByteArrayToString(byte[] byteArray)
            {
                if (byteArray == null || byteArray.Length == 0) return null;
    
                string str = System.Text.Encoding.Default.GetString(byteArray);
    
                return str;
            }
    
            //public static string ByteToString(byte[] value)
            //{
            //    StringBuilder sb = new StringBuilder();
            //    for (int i = 0; i < value.Length; i++)
            //    {
            //        sb.Append(value[i].ToString("x2"));
            //    }
            //    return sb.ToString();
            //}
    
    
            #region SHA1 (数字签名)
    
           
            public static string GetSHA1(string strSource)
            {
                string strResult = "";
    
                //Create
                System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
                byte[] bytResult = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource));
                for (int i = 0; i < bytResult.Length; i++)
                {
                    strResult = strResult + bytResult[i].ToString("X2");
                }
                return strResult;
            }
    
            public static byte[] GetSHA1(byte[] value)
            {
                System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
                return sha.ComputeHash(value);
            }
    
            #endregion SHA1
    
            #region DES
    
            /**/
            /// <summary>
            /// DES加密
            /// </summary>
            /// <param name="encryptString"></param>
            /// <returns></returns>
            public static string DesEncrypt(string encryptString, string sKey)
            {
    
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock();
                        cs.Close();
                    }
                    string str = Convert.ToBase64String(ms.ToArray());
                    ms.Close();
                    return str;
                }
    
            }
    
            /**/
            /// <summary>
            /// DES解密
            /// </summary>
            /// <param name="decryptString"></param>
            /// <returns></returns>
            public static string DesDecrypt(string decryptString, string sKey)
            {
    
                byte[] inputByteArray = Convert.FromBase64String(decryptString);
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock();
                        cs.Close();
                    }
                    string str = Encoding.UTF8.GetString(ms.ToArray());
                    ms.Close();
                    return str;
                }
    
            }
    
            #endregion DES
    
            #region AES
    
            #region Use static key
    
            private static readonly byte[] aesKey = { 0x03, 0x00, 0x52, 0xc3, 0x03, 0x00, 0x52, 0xc3, 0x03, 0x00, 0x52, 0xc3, 
                    
                                                        0x03, 0x00, 0x52, 0xc3 };
    
            public static string StaticAeskey
            {
                get { return System.Text.Encoding.Default.GetString(aesKey); }
            }
    
            /// <summary>
            /// AES encode.
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            public static string AesEncode(string value)
            {
                using (Aes aes = Aes.Create())
                {
                    using (ICryptoTransform encryptor = aes.CreateEncryptor(aesKey, aesKey))
                    {
                        byte[] buffer = Encoding.UTF8.GetBytes(value);
                        buffer = encryptor.TransformFinalBlock(buffer, 0, buffer.Length);
                        return Convert.ToBase64String(buffer);
                    }
                }
            }
    
    
            /// <summary>
            /// AES decode.
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            public static string AesDecode(string value)
            {
                using (Aes aes = Aes.Create())
                {
                    using (ICryptoTransform decryptor = aes.CreateDecryptor(aesKey, aesKey))
                    {
                        byte[] buffer = Convert.FromBase64String(value);
                        buffer = decryptor.TransformFinalBlock(buffer, 0, buffer.Length);
                        return Encoding.UTF8.GetString(buffer);
                    }
                }
            }
    
            #endregion Use static key
    
            public static byte[] GetKey()
            {
    
                Random rd = new Random();
                byte[] key = new byte[16];
                rd.NextBytes(key);
                return key;
            }
    
            public static byte[] AesEncode(byte[] key, byte[] value)
            {
                using (Aes aes = Aes.Create())
                {
                    using (ICryptoTransform encryptor = aes.CreateEncryptor(key, key))
                    {
                        return encryptor.TransformFinalBlock(value, 0, value.Length);
                    }
                }
            }
    
            public static byte[] AesDecode(byte[] key, byte[] value)
            {
                using (Aes aes = Aes.Create())
                {
                    using (ICryptoTransform decryptor = aes.CreateDecryptor(key, key))
                    {
                        return decryptor.TransformFinalBlock(value, 0, value.Length);
                    }
                }
            }
    
            #endregion AES
    
        }
    }

     

  • 相关阅读:
    [转]十步完全理解SQL
    [转]Java日期时间使用总结
    [转]Mybatis出现:无效的列类型: 1111 错误
    [转]java.lang.OutOfMemoryError: PermGen space及其解决方法
    [转]Spring3核心技术之事务管理机制
    [转]Spring的事务管理难点剖析(1):DAO和事务管理的牵绊
    设计模式之装饰模式
    进程通信
    设计模式之备忘录模式
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/quietwalk/p/3531710.html
Copyright © 2011-2022 走看看