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);
        }
Beispiel #2
0
        /// <summary>
        /// 加密
        /// </summary>
        byte[] Encrypt(Encrypt_Type EncryptType, string EncryptString, string Key = "", string IV = "")
        {
            try
            {
                SymmetricAlgorithm ect = null;
                switch (EncryptType)
                {
                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 AesCryptoServiceProvider();
                    if (string.IsNullOrEmpty(IV))
                    {
                        IV = Key.Substring(0, 16);
                    }
                    ect.BlockSize = BlockSize;
                    break;

                case Encrypt_Type.DES_MD5:
                    if (!string.IsNullOrEmpty(Key))
                    {
                        ect = new DESCryptoServiceProvider();
                        if (string.IsNullOrEmpty(IV))
                        {
                            IV = Key;
                        }
                        byte[] inputByteArray = Encode.GetBytes(EncryptString);
                        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.CreateEncryptor(), CryptoStreamMode.Write);
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock();
                        return(ms.ToArray());
                    }
                    else
                    {
                        goto default;
                    }

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

                case Encrypt_Type.RC4:
                    if (!string.IsNullOrEmpty(Key))
                    {
                        RC4CryptoServiceProvider rc4 = new RC4CryptoServiceProvider();
                        rc4.Encode = Encode;
                        return(rc4.Encrypt(EncryptString, Key));
                    }
                    else
                    {
                        goto default;
                    }

                case Encrypt_Type.RSA:
                    if (!string.IsNullOrEmpty(Key))
                    {
                        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(dwKeySize);
                        RSA.FromXmlString(Key);
                        byte[] dataToEncrypt = Encode.GetBytes(EncryptString);
                        byte[] encryptedData = RSA.Encrypt(dataToEncrypt, false);
                        return(encryptedData);
                    }
                    else
                    {
                        goto default;
                    }

                case Encrypt_Type.MD5:
                    MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
                    return(Hash(md5Hasher, EncryptString));

                case Encrypt_Type.MD5_16:
                    md5Hasher = new MD5CryptoServiceProvider();
                    byte[] bs = new byte[8];
                    Array.Copy(Hash(md5Hasher, EncryptString), 4, bs, 0, 8);
                    return(bs);

                case Encrypt_Type.SHA1:
                    SHA1 sha1Hasher = new SHA1CryptoServiceProvider();
                    return(Hash(sha1Hasher, EncryptString));

                case Encrypt_Type.HMACSHA1:
                    if (!string.IsNullOrEmpty(Key))
                    {
                        HMACSHA1 hmacsha1 = new HMACSHA1(Encode.GetBytes(Key));
                        return(Hash(hmacsha1, EncryptString));
                    }
                    else
                    {
                        goto default;
                    }

                default:
                    return(null);
                }

                ect.Key     = Encode.GetBytes(Key);
                ect.IV      = Encode.GetBytes(IV);
                ect.Mode    = Mode;
                ect.Padding = Padding;
                ICryptoTransform Encrypt = ect.CreateEncryptor();
                byte[]           data    = Encode.GetBytes(EncryptString);
                return(Encrypt.TransformFinalBlock(data, 0, data.Length));
            }
            catch (Exception ex) { if (throwEx)
                                   {
                                       throw ex;
                                   }
            }
            return(null);
        }