/// <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; } }
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);
/// <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); } }