2014-01-09 29 views

回答

3

加密适用于字节,并产生字节。所以,就其本身而言,当然你可以使用没有Base 64的AES。但是,如果你想输入和输出为字符串,那么你需要使用某种形式的编码。

基地64(之一)编码任意字节成字符串的最直接的方法,但你可以自由地使用另外一个,如果你选择。

这就是你需要应对的加密输入或解密输入。

0

您提出的具体问题已由Damien回答。然而,如果你做了谷歌,你会得到here

using System; 
using System.IO; 
using System.Security.Cryptography; 

namespace Aes_Example 
{ 
    class AesExample 
    { 
     public static void Main() 
     { 
      try 
      { 

       string original = "Here is some data to encrypt!"; 

       // Create a new instance of the Aes 
       // class. This generates a new key and initialization 
       // vector (IV). 
       using (Aes myAes = Aes.Create()) 
       { 

        // Encrypt the string to an array of bytes. 
        byte[] encrypted = EncryptStringToBytes_Aes(original, 
myAes.Key, myAes.IV); 

        // Decrypt the bytes to a string. 
        string roundtrip = DecryptStringFromBytes_Aes(encrypted, 
myAes.Key, myAes.IV); 

        //Display the original data and the decrypted data. 
        Console.WriteLine("Original: {0}", original); 
        Console.WriteLine("Round Trip: {0}", roundtrip); 
       } 

      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Error: {0}", e.Message); 
      } 
     } 
     static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, 
byte[] IV) 
     { 
      // Check arguments. 
      if (plainText == null || plainText.Length <= 0) 
       throw new ArgumentNullException("plainText"); 
      if (Key == null || Key.Length <= 0) 
       throw new ArgumentNullException("Key"); 
      if (IV == null || IV.Length <= 0) 
       throw new ArgumentNullException("Key"); 
      byte[] encrypted; 
      // Create an Aes object 
      // with the specified key and IV. 
      using (Aes aesAlg = Aes.Create()) 
      { 
       aesAlg.Key = Key; 
       aesAlg.IV = IV; 

       // Create a decrytor to perform the stream transform. 
       ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key 
, aesAlg.IV); 

       // Create the streams used for encryption. 
       using (MemoryStream msEncrypt = new MemoryStream()) 
       { 
        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt 
, encryptor, CryptoStreamMode.Write)) 
        { 
         using (StreamWriter swEncrypt = new StreamWriter(
csEncrypt)) 
         { 

          //Write all data to the stream. 
          swEncrypt.Write(plainText); 
         } 
         encrypted = msEncrypt.ToArray(); 
        } 
       } 
      } 


      // Return the encrypted bytes from the memory stream. 
      return encrypted; 

     } 

     static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key 
, byte[] IV) 
     { 
      // Check arguments. 
      if (cipherText == null || cipherText.Length <= 0) 
       throw new ArgumentNullException("cipherText"); 
      if (Key == null || Key.Length <= 0) 
       throw new ArgumentNullException("Key"); 
      if (IV == null || IV.Length <= 0) 
       throw new ArgumentNullException("Key"); 

      // Declare the string used to hold 
      // the decrypted text. 
      string plaintext = null; 

      // Create an Aes object 
      // with the specified key and IV. 
      using (Aes aesAlg = Aes.Create()) 
      { 
       aesAlg.Key = Key; 
       aesAlg.IV = IV; 

       // Create a decrytor to perform the stream transform. 
       ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key 
, aesAlg.IV); 

       // Create the streams used for decryption. 
       using (MemoryStream msDecrypt = new MemoryStream(cipherText)) 
       { 
        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt 
, decryptor, CryptoStreamMode.Read)) 
        { 
         using (StreamReader srDecrypt = new StreamReader(
csDecrypt)) 
         { 

          // Read the decrypted bytes from the decrypting 
stream 
          // and place them in a string. 
          plaintext = srDecrypt.ReadToEnd(); 
         } 
        } 
       } 

      } 

      return plaintext; 

     } 
    } 
} 
+0

谢谢, 您的代码是控制台的基础,但我可以在基本winform先生使用该代码? – Bcktr

+0

ofcourse你可以在任何地方使用它。 – Ehsan

相关问题