简体   繁体   English

在c#中使用AES-256对称算法(AES / ECB / PKCS7Padding)的加密方法

[英]Encryption method for using AES-256 symmetric algorithm (AES/ECB/PKCS7Padding) in c#

I want to encrypt a string using AES 256-bit encryption algorithm with ECB and PKCS7Padding. 我想使用带有ECB和PKCS7Padding的AES 256位加密算法来加密字符串。 I had gone through many sites but none of them were suitable. 我曾浏览过许多站点,但没有一个适合。 Please suggest a solution 请提出解决方案

public static string Encrypt(string PlainText, string Password,
               string Salt = "Kosher", string HashAlgorithm = "SHA1",
               int PasswordIterations = 2, string InitialVector = "OFRna73m*aze01xY",
               int KeySize = 256)
           {
               if (string.IsNullOrEmpty(PlainText))
                   return "";
               byte[] InitialVectorBytes = Encoding.ASCII.GetBytes(InitialVector);
               byte[] SaltValueBytes = Encoding.ASCII.GetBytes(Salt);
               byte[] PlainTextBytes = Encoding.UTF8.GetBytes(PlainText);
               PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations);
               byte[] KeyBytes = DerivedPassword.GetBytes(KeySize / 8);
               RijndaelManaged SymmetricKey = new RijndaelManaged();
               SymmetricKey.Mode = CipherMode.CBC;
               byte[] CipherTextBytes = null;
               using (ICryptoTransform Encryptor = SymmetricKey.CreateEncryptor(KeyBytes, InitialVectorBytes))
               {
                   using (MemoryStream MemStream = new MemoryStream())
                   {
                       using (CryptoStream CryptoStream = new CryptoStream(MemStream, Encryptor, CryptoStreamMode.Write))
                       {
                           CryptoStream.Write(PlainTextBytes, 0, PlainTextBytes.Length);
                           CryptoStream.FlushFinalBlock();
                           CipherTextBytes = MemStream.ToArray();
                           MemStream.Close();
                           CryptoStream.Close();
                       }
                   }
               }
               SymmetricKey.Clear();
               return Convert.ToBase64String(CipherTextBytes);
           }

source 资源

Note: you can change the mode by changing SymmetricKey.Mode = CipherMode.CBC; 注意:您可以通过更改SymmetricKey.Mode = CipherMode.CBC;来更改模式SymmetricKey.Mode = CipherMode.CBC;

and you can add SymmetricKey.Padding = PaddingMode.PKCS7; 并且可以添加SymmetricKey.Padding = PaddingMode.PKCS7; for padding 用于填充

with bounty castle you should be able to do this : 使用赏金城堡,您应该能够做到这一点:

cipher = CipherUtilities.GetCipher("AES/ECB/PKCS7"); 
cipher.Init(false, new KeyParameter(key));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM