2012-08-01 6 views
1

문자열을 암호화 할 때 아무런 오류가 발생하지 않지만 문자열을 해독하려고하면 오류가 발생하며 Input.Length는 유효하지 않습니다. 어떤 아이디어?C# TripleDES 부정확 한 입력 길이

public class Crypt 
    { 
     public string Encrypt(string Key, string Input) 
     { 
      ICryptoTransform crypted = tran(Key).CreateEncryptor(); 
      UTF8Encoding utf8 = new UTF8Encoding(); 
      return utf8.GetString(crypted.TransformFinalBlock(utf8.GetBytes(Input), 0, Input.Length)); 
     } 
     public string Decrypt(string Key, string Input) 
     { 
      ICryptoTransform crypted = tran(Key).CreateDecryptor(); 
      UTF8Encoding utf8 = new UTF8Encoding(); 
      return utf8.GetString(crypted.TransformFinalBlock(utf8.GetBytes(Input), 0, Input.Length)); 
     } 
     private TripleDESCryptoServiceProvider tran(string Key) 
     { 
      MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 
      UTF8Encoding utf8 = new UTF8Encoding(); 
      TripleDESCryptoServiceProvider tDES = new TripleDESCryptoServiceProvider(); 
      tDES.Key = md5.ComputeHash(utf8.GetBytes(Key)); 
      tDES.Mode = CipherMode.ECB; 
      tDES.Padding = PaddingMode.PKCS7; 
      return tDES; 
     } 
    } 
+1

'새로운 UTF8Encoding()'이 필요없고,'Encoding.UTF8'은 이미 사용 가능합니다. – spender

답변

3

암호화 프로세스에서 반환 된 바이트는 UTF8이 아니지만 사용자는이를 처리합니다. 암호화 된 데이터의 텍스트 표현을 원한다면 임의의 바이트를 UTF8로 변환하는 것 이상을 수행해야합니다.

Skeet의 답변 here이 나에게 도움이됩니다.