2017-03-16 54 views
-1

所以我嘗試用C#DESSymmetricAlgorithm DES C#。 Base64編碼

數據加密有以下代碼

  static public string Encrypt(string _dataToEncrypt) { 
       SymmetricAlgorithm algorithm = DES.Create(); 
       ICryptoTransform transform = algorithm.CreateEncryptor(key, iv); 
       byte[] inputbuffer = Encoding.Unicode.GetBytes(_dataToEncrypt); 
       byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); 
       return Convert.ToBase64String(outputBuffer); 
      } 

      static public string Decrypt(string _dataToDecrypt) { 
       SymmetricAlgorithm algorithm = DES.Create(); 
       ICryptoTransform transform = algorithm.CreateDecryptor(key, iv); 
       byte[] inputbuffer = Convert.FromBase64String(_dataToDecrypt); // Here is the problem. 
       byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); 
       return Encoding.Unicode.GetString(outputBuffer); 
      } 

和IM得到一個錯誤System.FormatException: 'Invalid length for a Base-64 char array or string.'

它的工作原理,當串有偶數個字符。

它甚至真正的加密/有奇數個字符的解密數據?

+0

不要在新代碼中使用DES,它是不安全的,並被AES取代。 – zaph

+0

提供示例輸入/輸出,用於演示錯誤,包括_dataToDecrypt in。Is – zaph

回答

1

DES以及AES對可以加密的內容沒有限制,問題在別處。

它看起來像是一個Bas64編碼問題,因爲發生錯誤的那一行。

也許尾隨「=」字符是從Base64的剝離。

信息:

DES是一種基於塊的加密算法,因爲這樣的輸入必須是塊的大小,對於DES爲8字節的整數倍。當輸入不總是的整數倍填充必須添加,以讓執行最簡單的方法爲你做的,通過指定的填充,一般PKCS#5 DES。

對於SymmetricAlgorithm使用Padding屬性PKCS7,最好總是指定所有內容並且不依賴於默認值。

algorithm.Padding = PaddingMode.PKCS7;