各种加密和解密算法的实现

/// <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
}
原文地址:https://www.cnblogs.com/knowgest/p/2686013.html