2014-02-08 4 views
0

DES 암호화에서 파일의 암호를 해독하는 코드가 있습니다. 키가 암호화 된 암호를 해독 할 때 키를 입력하더라도 파일을 계속 가져 오려고합니다. 하지만 오류가 발생했습니다. 나는 실행중인 프로세스가 해독 유지하기 위해 추가하거나 변경해야 코드잘못된 키가있는 경우 파일의 암호 해독이 잘못되었습니다.

while ((data = cryptostreamDecr.ReadByte()) != -1) // Message Error : Bad Data. 

?

private static void DecryptFile(string sInputFilename, string sKey) 
{ 
    var DES = new DESCryptoServiceProvider(); 
    DES.Key = Encoding.ASCII.GetBytes(sKey); 
    DES.IV = Encoding.ASCII.GetBytes(sKey); 
    ICryptoTransform desdecrypt = DES.CreateDecryptor(); 
    using (var fsread = new FileStream(sInputFilename, FileMode.Open, 
       FileAccess.ReadWrite)) 
      { 
       using (var cryptostreamDecr = new CryptoStream(fsread, 
        desdecrypt, 
        CryptoStreamMode.Read)) 
       { 
        int data; 

        fsread.Flush(); 

        using (var ms = new MemoryStream()) 
        { 
         while ((data = cryptostreamDecr.ReadByte()) != -1) 
         { 
          ms.WriteByte((byte)data); 
         } 

         cryptostreamDecr.Close(); 

         using (var fsWrite = new FileStream(sInputFilename, FileMode.Truncate)) 
         { 
          ms.WriteTo(fsWrite); 
          ms.Flush(); 
         } 
        } 
       } 
      } 
     } 

암호화 코드 :

가 가 가

는 [EDIT]

public static void EncryptFile(string sInputFilename, string sKey) { FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.ReadWrite); DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey); DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey); ICryptoTransform desencrypt = DES.CreateEncryptor(); CryptoStream cryptostream = new CryptoStream(fsInput, desencrypt, CryptoStreamMode.Write); byte[] bytearrayinput = new byte[fsInput.Length]; fsInput.Read(bytearrayinput, 0, bytearrayinput.Length); fsInput.SetLength(0); cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length); cryptostream.FlushFinalBlock(); cryptostream.Close(); fsInput.Close(); } 
: Encypt에서 제거 :

cryptostream.FlushFinalBlock();

를 해독

DES.Padding = PaddingMode.None;

답변

1

64 비트의 추가가 아니라 유효한 키 DES 암호화 알고리즘의 크기 8 비트가 1 ASCII 문자와 같으면 64 비트가 8 문자와 같습니다.

8 자만 보내면이 (C# "Bad Data" exception when decrypting encrypted file)을 확인하십시오. 그것은 당신의 문제를 해결할 수 있습니다.

[편집]DecryptFileDES.Padding = PaddingMode.None;를 추가합니다.

+1

예, 암호 해독 프로세스에서 키를 삽입하려고하면 암호가 잘못되었을 때와 다른 8 문자를 사용합니다. 나쁜 데이터입니다. – sloqye

+0

암호 해독 매개 변수에서 출력 대상 파일을 사용하지 않았습니다. 문제 일 경우? – sloqye

+0

나는 그것을했다. 그러나 같은 줄에 같은 오류가 있습니다. 내 ecrypt 코드를 게시했습니다. – sloqye