2013-06-19 105 views
7

我已經寫了一個加密程序建立在網絡上的幾種方法。我目前正在測試加密並注意到每個加密值都以'=='結尾?AES管理的加密值始終以==結尾?

有誰知道爲什麼這可能是這種情況?

這是我正在使用的代碼。關鍵是一個32個字符的值,而IV是一個16個字符的值。

private static readonly byte[] key = Encoding.Default.GetBytes(getKey()); 
    private static readonly byte[] iv = Encoding.Default.GetBytes("$ruVe4E!eM#kupuc"); 

    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="val"></param> 
    /// <returns></returns> 
    public static string Encrypt(string val) 
    { 
     string result = string.Empty; 

     var aes = getEncryptionType(); 

     using (MemoryStream msEncrypt = new MemoryStream()) 
     { 
      using (ICryptoTransform encryptor = aes.CreateEncryptor(key, iv)) 
      { 
       using(CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) 
       { 
        using(StreamWriter swEncrypt = new StreamWriter(csEncrypt)) 
        { 
         swEncrypt.Write(val); 
        } 
       } 
      } 
      result = Convert.ToBase64String(msEncrypt.ToArray()); 
     } 
     aes.Clear(); 
     return result; 
    } 

getEncryptionType返回如下的AESManaged類:

private static AesManaged getEncryptionType() 
    { 
     AesManaged aes = new AesManaged(); 
     aes.Mode = CipherMode.CBC; 
     aes.Padding = PaddingMode.PKCS7; 
     return aes; 
    } 

目前的測試方法如下所示:

Random rnd = new Random(); 

       for (int i = 0; i < 50000; i++) 
       { 
        int random = rnd.Next(1147483647, int.MaxValue); 
        Guid guid = dal.getToken(CryptoService.Encrypt(random.ToString())); 

        if (i % 100 == 0) 
         addLog(string.Format("{0} new values added", i.ToString()), LogType.Dialog); 
       } 
+1

如果你有兩個問題,那麼**提出兩個問題**。你在這個問題上問了兩個完全不同的問題。大多數人只會回答其中的一個,然後在嘗試選擇接受哪個答案時會遇到問題。我的建議是,您從這個問題中刪除第二個問題並開始一個新問題。 –

+1

另外,C#中的char是16位。 –

回答