zoukankan      html  css  js  c++  java
  • 各种加密和解密算法的实现

    /// <summary>
    ///StevenDataEncryption 的摘要说明
    /// </summary>
    public class StevenDataEncryption
    {
        public StevenDataEncryption()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }
    
        //默認密鈅加密算法
        public static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
    
        #region DES加密算法
        /// <summary>
        /// DES加密方法
        /// </summary>
        /// <param name="encryptString">要加密的字符串</param>
        /// <param name="encryptKey">密鈅的位數</param>
        /// <returns></returns>
        public static string EncryptionDES(string encryptString, string encryptKey)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
                byte[] rgbIV = Keys;
                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Convert.ToBase64String(mStream.ToArray());
            }
            catch
            {
                return encryptString;
            }
        }
        #endregion
    
        #region DES解密算法
        /// <summary>
        /// DES解密方法
        /// </summary>
        /// <param name="decryptString">要解密的字符串</param>
        /// <param name="decryptKey">密鈅的位數</param>
        /// <returns></returns>
        public static string DecryptDES(string decryptString, string decryptKey)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 8));
                byte[] rgbIV = Keys;
                byte[] inputByteArray = Convert.FromBase64String(decryptString);
                DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(mStream.ToArray());
            }
            catch
            {
                return decryptString;
            }
        }
        #endregion
    
        #region AES加密
        /// <summary>       
        /// AES加密         
        /// </summary>        
        /// <param name="text">加密字符</param>        
        /// <param name="password">加密的密码</param>        
        /// <param name="iv">密钥(隨機生成)</param>        
        /// <returns></returns>
        public static string AESEncrypt(string text, string password, string iv) 
        {
            try
            {
                RijndaelManaged rijndaelCipher = new RijndaelManaged();
                rijndaelCipher.Mode = CipherMode.CBC;
                rijndaelCipher.Padding = PaddingMode.PKCS7;
                rijndaelCipher.KeySize = 128;
                rijndaelCipher.BlockSize = 128;
                byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);
                byte[] keyBytes = new byte[16];
                int len = pwdBytes.Length;
                if (len > keyBytes.Length) 
                    len = keyBytes.Length;
                System.Array.Copy(pwdBytes, keyBytes, len);
                rijndaelCipher.Key = keyBytes;
                byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);
                rijndaelCipher.IV = ivBytes;
                ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
                byte[] plainText = Encoding.UTF8.GetBytes(text);
                byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);
                return Convert.ToBase64String(cipherBytes);
            }
            catch
            {
                return text;
            }
        }
        #endregion
    
        #region 随机生成密钥
        /// <summary>        
        /// 随机生成密钥        
        /// </summary>        
        /// <returns></returns>
        public static string GetIv(int n) 
        { 
            char[] arrChar = new char[] { 'a', 'b', 'd', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 'q', 's', 't', 'u', 'v', 'w', 'z', 'y', 'x', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Q', 'P', 'R', 'T', 'S', 'V', 'U', 'W', 'X', 'Y', 'Z' }; 
            StringBuilder num = new StringBuilder(); 
            Random rnd = new Random(DateTime.Now.Millisecond); 
            for (int i = 0; i < n; i++) 
            { 
                num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString()); 
            } 
            return num.ToString();
        }
        #endregion
    
        #region AES解密
        /// <summary>        
        /// AES解密        
        /// </summary>        
        /// <param name="text"></param>        
        /// <param name="password"></param>        
        /// <param name="iv"></param>        
        /// <returns></returns>
        public static string AESDecrypt(string text, string password,string iv) 
        {
            try
            {
                RijndaelManaged rijndaelCipher = new RijndaelManaged();
                rijndaelCipher.Mode = CipherMode.CBC;
                rijndaelCipher.Padding = PaddingMode.PKCS7;
                rijndaelCipher.KeySize = 128;
                rijndaelCipher.BlockSize = 128;
                byte[] encryptedData = Convert.FromBase64String(text);
                byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);
                byte[] keyBytes = new byte[16];
                int len = pwdBytes.Length;
                if (len > keyBytes.Length) len = keyBytes.Length;
                System.Array.Copy(pwdBytes, keyBytes, len);
                rijndaelCipher.Key = keyBytes;
                byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);
                rijndaelCipher.IV = ivBytes;
                ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
                byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
                return Encoding.UTF8.GetString(plainText);
            }
            catch
            {
                return text;
            }
        }
        #endregion
    
        #region 哈希加密
        /// <summary>
        /// 哈希加密(解密哈希需要加密匹配字符串)
        /// </summary>
        /// <param name="text">要加密的字符</param>
        /// <returns></returns>
        public static string HSEncrypt(string text)
        {
            //將數據轉化為字節流
            byte[] keyBytes = System.Text.Encoding.UTF32.GetBytes(text);
    
            SHA1 SHhash = new SHA1Managed();
            byte[] arHashvalue;
            arHashvalue = SHhash.ComputeHash(keyBytes);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < arHashvalue.Length; i++)
            {
                sb.Append(arHashvalue[i].ToString());
            }
            return sb.ToString();
        }
        #endregion
    
        #region 哈希破解方法(破解數字)
        /// <summary>
        /// 哈希破解方法
        /// </summary>
        /// <param name="text">輸入加密后的哈希值</param>
        /// <returns></returns>
        public static string HSDecrypt(string text)
        {
            //破解數字
    
            string HSResult="";
            int num = 1;
            for (int i = 0; i < num; i++)
            {
                 HSResult=HSEncrypt(num.ToString());
                 if (HSResult == text)
                 {
                     return num.ToString();
                 }
                 else
                 {
                     num++;
                 }
            }
            return num.ToString() ;
        }
        #endregion
    }
  • 相关阅读:
    day3 数据类型
    子查询
    mysql综合练习题
    day5 练习
    月末总结
    Iconfont-阿里巴巴矢量图标库
    vue简介
    Redis简介和数据结构
    浏览器初始化css
    vue脚手架搭建项目初始化
  • 原文地址:https://www.cnblogs.com/knowgest/p/2686013.html
Copyright © 2011-2022 走看看