Пример #1
0
        /// <summary>
        /// 获取加密和解密时用的key和iv
        /// </summary>
        /// <param name="providerType">算法类型</param>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        public static void GenerateCryptKeyAndIV(CryptProviderType providerType, out byte[] key, out byte[] iv)
        {
            key = null;
            iv  = null;
            switch (providerType)
            {
            case CryptProviderType.AES:
                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                aes.GenerateKey();
                aes.GenerateIV();
                key = aes.Key;
                iv  = aes.IV;
                return;

            case CryptProviderType.DES:
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                des.GenerateKey();
                des.GenerateIV();
                key = des.Key;
                iv  = des.IV;
                return;

            case CryptProviderType.TripleDES:
                TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
                tdes.GenerateKey();
                tdes.GenerateIV();
                key = tdes.Key;
                iv  = tdes.IV;
                return;

            default:
                return;
            }
        }
Пример #2
0
 public static extern bool CryptAcquireContext(
     out IntPtr prov,
     [MarshalAs(UnmanagedType.LPTStr)]
     string container,
     [MarshalAs(UnmanagedType.LPTStr)]
     string provider,
     [MarshalAs(UnmanagedType.U4)]
     CryptProviderType provType,
     [MarshalAs(UnmanagedType.U4)]
     CryptAcquireContextFlags flags);
Пример #3
0
        /// <summary>
        /// 对字符串进行加密
        /// </summary>
        /// <param name="input">字符串</param>
        /// <param name="providerType">加密算法类型</param>
        /// <returns></returns>
        public static string Encrypt(string input, byte[] key, byte[] iv, CryptProviderType providerType)
        {
            MemoryStream mstream = new MemoryStream();
            CryptoStream cstream = null;

            switch (providerType)
            {
            case CryptProviderType.AES:
                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                cstream = new CryptoStream(mstream, aes.CreateEncryptor(key, iv), CryptoStreamMode.Write);
                break;

            case CryptProviderType.DES:
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                cstream = new CryptoStream(mstream, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);
                break;

            case CryptProviderType.TripleDES:
                TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
                cstream = new CryptoStream(mstream, tdes.CreateEncryptor(key, iv), CryptoStreamMode.Write);
                break;

            default:
                break;
            }

            if (cstream == null)
            {
                mstream.Close();
                return(input);
            }
            else
            {
                byte[] ibuffer = Encoding.Default.GetBytes(input);
                cstream.Write(ibuffer, 0, ibuffer.Length);
                cstream.FlushFinalBlock();

                string output = Convert.ToBase64String(mstream.ToArray());
                cstream.Close();
                mstream.Close();
                return(output);
            }
        }