コード例 #1
0
 /// <summary>
 /// Decrypt string with Rijndael.
 /// </summary>
 /// <param name="cipherText"></param>
 /// <param name="passPhrase"></param>
 /// <param name="keysize"></param>
 /// <returns></returns>
 public static string DecryptStringManual(string cipherText, string passPhrase, int keysize)
 {
     using (PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, Encoding.UTF8.GetBytes(ClassUtils.FromHex(passPhrase.Substring(0, 8)))))
     {
         byte[] keyBytes = password.GetBytes(keysize / 8);
         using (var symmetricKey = new AesCryptoServiceProvider()
         {
             Mode = CipherMode.CFB
         })
         {
             byte[] initVectorBytes = password.GetBytes(16);
             symmetricKey.BlockSize = 128;
             symmetricKey.KeySize   = keysize;
             symmetricKey.Padding   = PaddingMode.PKCS7;
             symmetricKey.Key       = keyBytes;
             using (ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes))
             {
                 byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
                 using (MemoryStream memoryStream = new MemoryStream(cipherTextBytes))
                 {
                     using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
                     {
                         byte[] plainTextBytes     = new byte[cipherTextBytes.Length];
                         int    decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
                         return(Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount));
                     }
                 }
             }
         }
     }
 }
コード例 #2
0
 /// <summary>
 /// Encrypt string from Rijndael.
 /// </summary>
 /// <param name="plainText"></param>
 /// <param name="passPhrase"></param>
 /// <param name="keysize"></param>
 /// <returns></returns>
 public static string EncryptStringManual(string plainText, string passPhrase, int keysize)
 {
     using (PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, Encoding.UTF8.GetBytes(ClassUtils.FromHex(passPhrase.Substring(0, 8)))))
     {
         byte[] keyBytes = password.GetBytes(keysize / 8);
         using (var symmetricKey = new AesCryptoServiceProvider()
         {
             Mode = CipherMode.CFB
         })
         {
             byte[] initVectorBytes = password.GetBytes(16);
             symmetricKey.BlockSize = 128;
             symmetricKey.KeySize   = keysize;
             symmetricKey.Padding   = PaddingMode.PKCS7;
             symmetricKey.Key       = keyBytes;
             using (ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes))
             {
                 using (MemoryStream memoryStream = new MemoryStream())
                 {
                     using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                     {
                         byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
                         cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
                         cryptoStream.FlushFinalBlock();
                         byte[] cipherTextBytes = memoryStream.ToArray();
                         return(Convert.ToBase64String(cipherTextBytes));
                     }
                 }
             }
         }
     }
 }