Beispiel #1
0
        /// <summary>
        /// 解密
        /// </summary>
        string Decrypt(Encrypt_Type DecryptType, byte[] DecryptBytes, string Key, string IV = "")
        {
            try
            {
                SymmetricAlgorithm ect = null;
                switch (DecryptType)
                {
                case Encrypt_Type.DES_Base64:
                    ect = new DESCryptoServiceProvider();
                    if (string.IsNullOrEmpty(IV))
                    {
                        IV = Key.Substring(0, 8);
                    }
                    break;

                case Encrypt_Type.DES3:
                    ect = new TripleDESCryptoServiceProvider();
                    if (string.IsNullOrEmpty(IV))
                    {
                        IV = Key.Substring(0, 8);
                    }
                    ect.BlockSize = BlockSize;
                    break;

                case Encrypt_Type.AES:
                    ect = new RijndaelManaged();
                    if (string.IsNullOrEmpty(IV))
                    {
                        IV = Key.Substring(0, 16);
                    }
                    ect.BlockSize = BlockSize;
                    break;

                case Encrypt_Type.DES_MD5:
                    ect = new DESCryptoServiceProvider();
                    if (string.IsNullOrEmpty(IV))
                    {
                        IV = Key;
                    }
                    ect.Key     = Encode.GetBytes(Key);
                    ect.IV      = Encode.GetBytes(IV);
                    ect.Mode    = Mode;
                    ect.Padding = Padding;
                    MemoryStream ms = new MemoryStream();
                    CryptoStream cs = new CryptoStream(ms, ect.CreateDecryptor(), CryptoStreamMode.Write);
                    cs.Write(DecryptBytes, 0, DecryptBytes.Length);
                    cs.FlushFinalBlock();
                    return(Encode.GetString(ms.ToArray()));

                case Encrypt_Type.RC2:
                    ect = new RC2CryptoServiceProvider();
                    if (string.IsNullOrEmpty(IV))
                    {
                        IV = Key.Substring(0, 8);
                    }
                    ect.BlockSize = BlockSize;
                    break;

                case Encrypt_Type.RC4:
                    RC4CryptoServiceProvider rc4 = new RC4CryptoServiceProvider();
                    rc4.Encode = Encode;
                    return(rc4.Decrypt(DecryptBytes, Key));

                case Encrypt_Type.RSA:
                    RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                    RSA.FromXmlString(Key);
                    byte[] decryptedData = RSA.Decrypt(DecryptBytes, false);
                    return(Encode.GetString(decryptedData));

                default:
                    return(string.Empty);
                }

                ect.Key     = Encode.GetBytes(Key);
                ect.IV      = Encode.GetBytes(IV);
                ect.Mode    = Mode;
                ect.Padding = Padding;
                ICryptoTransform Decrypt = ect.CreateDecryptor();
                byte[]           result  = Decrypt.TransformFinalBlock(DecryptBytes, 0, DecryptBytes.Length);
                return(Encode.GetString(result));
            }
            catch (Exception ex) { if (throwEx)
                                   {
                                       throw ex;
                                   }
            }
            return(null);
        }