2017-03-16 13 views
-1

그래서 대칭 알고리즘 DES C#. Base64로

를 C# DES

를 사용하여 데이터를 암호화하기 위해 노력하고 메신저하면 다음과 같은 코드

  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); 
      } 

그리고 메신저 오류 문자열이 문자를 짝수가있을 때 의미가 있습니다 System.FormatException: 'Invalid length for a Base-64 char array or string.'

를 받고있다.

홀수 문자로 데이터를 암호화/해독하는 것이 실제적입니까?

+0

새 코드에서 DES를 사용하지 마십시오. 안전하지 않으며 AES를 능가합니다. – zaph

+0

'_dataToDecrypt'를 포함하여 오류를 나타내는 샘플 입출력을 제공하십시오. – zaph

답변

1

DES뿐만 아니라 AES는 암호화 할 수있는 것에 제한이 없습니다. 문제는 다른 곳에서 발생합니다.

오류가 발생한 줄이 주어진다면 Bas64 인코딩 문제 인 것 같습니다.

"="문자가 아마도 Base64에서 제거되었습니다.

정보 : 예를 들면, 입력 블록 크기, DES 8 바이트의 정확한 배수가되어야하므로

DES는, 블록 암호 알고리즘을 기반으로한다. 입력이 이 아니면 항상 정확한 복수 패딩을 추가해야합니다. 패딩을 지정하여 구현할 수있는 가장 쉬운 방법입니다 (일반적으로 DES 용 PKCS # 5).

SymmetricAlgorithm의 경우 Padding 속성 PKCS7을 사용하는 경우 모든 것을 완전히 지정하고 기본값에 의존하지 않는 것이 가장 좋습니다.

algorithm.Padding = PaddingMode.PKCS7;