public static byte[] Encrypt(byte[] input, byte[] key, byte[] salt, string algorithm) { if (input == null || input.Length < 1 || key == null || key.Length < 1 || salt == null || salt.Length < 1) { throw new ArgumentException(); } System.Security.Cryptography.SymmetricAlgorithm sAlgorithm; switch (algorithm.ToUpperInvariant()) { case "DES": sAlgorithm = DESCryptoServiceProvider.Create(); break; case "3DES": case "TDES": case "TRIPLEDES": sAlgorithm = TripleDESCryptoServiceProvider.Create(); break; case "AES": sAlgorithm = AesCryptoServiceProvider.Create(); break; case "RC2": sAlgorithm = RC2CryptoServiceProvider.Create(); break; case "RIJNDAEL": sAlgorithm = new RijndaelManaged(); break; default: throw new NotSupportedException(); } DeriveBytes rdb = new Rfc2898DeriveBytes(key, salt, 1024); sAlgorithm.Key = rdb.GetBytes(sAlgorithm.KeySize / 8); sAlgorithm.IV = rdb.GetBytes(sAlgorithm.BlockSize / 8); byte[] reslut; using (ICryptoTransform encryptor = sAlgorithm.CreateEncryptor(sAlgorithm.Key, sAlgorithm.IV)) { using (MemoryStream stream = new MemoryStream()) { using (CryptoStream cryptoStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write)) { cryptoStream.Write(input, 0, input.Length); cryptoStream.FlushFinalBlock(); cryptoStream.Clear(); } reslut = stream.ToArray(); } } sAlgorithm.Clear(); return(reslut); }
/// <summary> /// 対称アルゴリズムによる /// 暗号化サービスプロバイダを生成 /// </summary> /// <param name="esa"> /// 対称アルゴリズムによる /// 暗号化サービスプロバイダの種類 /// </param> /// <returns> /// 対称アルゴリズムによる /// 暗号化サービスプロバイダ /// </returns> private static SymmetricAlgorithm CreateSymmetricAlgorithm(EnumSymmetricAlgorithm esa) { SymmetricAlgorithm sa = null; // AesCryptoServiceProvider, AesManagedは.NET Framework 3.5からの提供。 // 暗号化プロバイダ選択の優先順は、高い順に、Managed → CAPI(CSP) → CNG。 // Aesは、ManagedがあるのでCAPI(CSP)のAesCryptoServiceProviderを削除。 // サポート範囲の変更により、今後、CAPI(CSP)とCNGの優先順位の反転を検討。 //if (esa == EnumSymmetricAlgorithm.AesCryptoServiceProvider) //{ // // AesCryptoServiceProviderサービスプロバイダ // sa = AesCryptoServiceProvider.Create(); // devps(1703) //} //else if (esa == EnumSymmetricAlgorithm.AesManaged) { // AesManagedサービスプロバイダ sa = AesManaged.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.DESCryptoServiceProvider) { // DESCryptoServiceProviderサービスプロバイダ sa = DESCryptoServiceProvider.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.RC2CryptoServiceProvider) { // RC2CryptoServiceProviderサービスプロバイダ sa = RC2CryptoServiceProvider.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.RijndaelManaged) { // RijndaelManagedサービスプロバイダ sa = RijndaelManaged.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider) { // TripleDESCryptoServiceProviderサービスプロバイダ sa = TripleDESCryptoServiceProvider.Create(); // devps(1703) } else { throw new ArgumentException( PublicExceptionMessage.ARGUMENT_INJUSTICE, "EnumSymmetricAlgorithm esa"); } return(sa); }
/// <summary> /// 対称アルゴリズムによる /// 暗号化サービスプロバイダを生成 /// </summary> /// <param name="esa"> /// 対称アルゴリズムによる /// 暗号化サービスプロバイダの種類 /// </param> /// <returns> /// 対称アルゴリズムによる /// 暗号化サービスプロバイダ /// </returns> private static SymmetricAlgorithm CreateSymmetricAlgorithm(EnumSymmetricAlgorithm esa) { SymmetricAlgorithm sa = null; // AesCryptoServiceProvider, AesManagedは3.5からの提供。 if (esa == EnumSymmetricAlgorithm.AesCryptoServiceProvider) { // AesCryptoServiceProviderサービスプロバイダ sa = AesCryptoServiceProvider.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.AesManaged) { // AesManagedサービスプロバイダ sa = AesManaged.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.DESCryptoServiceProvider) { // DESCryptoServiceProviderサービスプロバイダ sa = DESCryptoServiceProvider.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.RC2CryptoServiceProvider) { // RC2CryptoServiceProviderサービスプロバイダ sa = RC2CryptoServiceProvider.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.RijndaelManaged) { // RijndaelManagedサービスプロバイダ sa = RijndaelManaged.Create(); // devps(1703) } else if (esa == EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider) { // TripleDESCryptoServiceProviderサービスプロバイダ sa = TripleDESCryptoServiceProvider.Create(); // devps(1703) } else { throw new ArgumentException( PublicExceptionMessage.ARGUMENT_INJUSTICE, "EnumSymmetricAlgorithm esa"); } return(sa); }
/// <summary> /// Crea algoritmo a partire dalla definizione /// </summary> /// <param name="algorithm"></param> /// <returns></returns> private static SymmetricAlgorithm getAlgorithm(Encryptor.Algorithm algorithm) { switch (algorithm) { case Algorithm.DES: return(DESCryptoServiceProvider.Create()); case Algorithm.RC2: return(RC2CryptoServiceProvider.Create()); case Algorithm.Rijndael: return(RijndaelManaged.Create()); case Algorithm.TripleDES: return(TripleDESCryptoServiceProvider.Create()); default: break; } //Default return(null); }
/// <summary>対称アルゴリズム暗号化サービスプロバイダ生成</summary> /// <param name="esa">EnumSymmetricAlgorithm</param> /// <param name="cm">CipherMode</param> /// <param name="pm">PaddingMode</param> /// <returns>SymmetricAlgorithm</returns> private SymmetricAlgorithm CreateSymmetricAlgorithm(EnumSymmetricAlgorithm esa, CipherMode cm, PaddingMode pm) { #region Constructor SymmetricAlgorithm sa = null; #region Aes if (esa.HasFlag(EnumSymmetricAlgorithm.AES_CSP)) { // AesCryptoServiceProviderサービスプロバイダ sa = AesCryptoServiceProvider.Create(); // devps(1703) } else if (esa.HasFlag(EnumSymmetricAlgorithm.AES_M)) { // AesManagedサービスプロバイダ sa = AesManaged.Create(); // devps(1703) } #if NET45 || NET46 #else else if (esa.HasFlag(EnumSymmetricAlgorithm.AES_CNG)) { // AesCngサービスプロバイダ sa = AesCng.Create(); // devps(1703) } #endif #endregion #region TripleDES else if (esa.HasFlag(EnumSymmetricAlgorithm.TDES_CSP)) { // TripleDESCryptoServiceProviderサービスプロバイダ sa = TripleDESCryptoServiceProvider.Create(); // devps(1703) } #if NET45 || NET46 #else else if (esa.HasFlag(EnumSymmetricAlgorithm.TDES_CNG)) { // TripleDESCngサービスプロバイダ sa = TripleDESCng.Create(); // devps(1703) } #endif #endregion #region Others else if (esa.HasFlag(EnumSymmetricAlgorithm.DES_CSP)) { // DESCryptoServiceProviderサービスプロバイダ sa = DESCryptoServiceProvider.Create(); // devps(1703) } else if (esa.HasFlag(EnumSymmetricAlgorithm.RC2_CSP)) { // RC2CryptoServiceProviderサービスプロバイダ sa = RC2CryptoServiceProvider.Create(); // devps(1703) } else if (esa.HasFlag(EnumSymmetricAlgorithm.Rijndael_M)) { // RijndaelManagedサービスプロバイダ sa = RijndaelManaged.Create(); // devps(1703) } #endregion else { throw new ArgumentException( PublicExceptionMessage.ARGUMENT_INCORRECT, "EnumSymmetricAlgorithm esa"); } #endregion #region Options // cmが設定されている場合。 if (cm != 0) { sa.Mode = cm; } // pmが設定されている場合。 if (pm != 0) { sa.Padding = pm; } #endregion return(sa); }