2013-06-30 2 views
-1

간단한 해독 알고리즘을 사용하여 일부 파일의 암호를 해독하려고합니다. 지금까지 가지고있는 코드는 대부분 대부분 작동하지만 몇 백 바이트가 지나면 읽기를 멈추고 코드를 내 보냅니다. 예를 들어, X 파일이 14.7KB입니다. 프로그램을 통해 실행하면 643 바이트로 나옵니다. 현재 코드는 여기에 있습니다 : http://pastebin.com/aNNjYTzg 그것의 대부분이 사용되지 않도록 난 그냥, 기존 코드의 알고리즘에 추가모든 파일을 읽지 못함

이 사이트 서식 코드가 나를 미치게되기 때문에 ....

편집 :

cout << "Enter the name of your file to " << encrypt_decrypt[choice-1] << ": "; 
    cin >> filename; 
    in.open(filename); 

    getline(in,buffer); 

    void encryptdecrypt(const string buffer,const char map[],int len,string& newbuffer) 
    { 
    int i=0; 
    char t; 
    char code; 
    for (i=0;i<buffer.length();i++) 
    { 
      t=buffer[i]; 
      (t += 251 - ((i * 14) & 255)); 
      cout << "Buffer length: " << buffer.length() << endl; 
      cout << "newbuffer length: " << newbuffer.length() << endl; 
      newbuffer.push_back(t); 
    } 
    newbuffer.push_back('\n'); 
    } 
    out << newbuffer; 

EDITx2 : 는 전체 파일을 읽습니다,하지만 시작 부분이 해독된다.

<?xml version="1.0"?> 
<Materi 
+"Òû%÷*&$' 
ëÐ!ÐÎ&"# ëÐ"!Ý " 

Ü"ÐÎÝ컸 
+1

파일이 "바이너리"이고 텍스트로 읽으려고합니다 ... –

+1

흥미로운 부분을 게시하십시오. 사용하지 않는 코드의 줄과 줄을 통해 다이빙을 기대할 수 없습니다 ... – filmor

+2

이 사이트에서 코드를 형식화하는 것이 어렵지 않습니다. 코드를 강조 표시 한 다음 ctrl + k를 누름 – imulsion

답변

1

그래서, (t += 251 - ((i * 14) & 255))의 결과가 문자 범위의 값, 당신은 "진"파일로 파일을 읽고 쓸 필요가있을 것이다, 또는 내용하지 않습니다 "작업"주어진.

는 출력 파일에 데이터를 기록 할 수있는 데이터의 블록과 stream::write을 읽을 stream::read를 사용할 필요가 있다는 것을 의미에서,이 파일을 열 때, 당신은 모드로 respecitvely ifstream::binaryofstream::binary를 제공해야합니다.

텍스트 입력 (당신이 모드에서 binary를 지정하지 않는 경우) 특정 입력을 해석하는 것은 end of file (입력을 정지)로 바이트와 다른 입력은 getline을 사용하는 경우 입력을 무시합니다, newline 문자 (로 바이트). 암호화 된 양식에서는 이러한 문자를 사용하여 해당 문자를 사용하지 않으므로 텍스트 기반 입력을 사용하면 안됩니다 (암호화 된 파일은 텍스트 파일이 아닙니다).

+0

이제 전체 파일을 읽지 만 파일의 시작 부분 만 해독됩니다. – user2536086

+0

죄송합니다. 코드에서 정확히 어디서 잘못되었는지 이해하지 못하면 말할 수 없습니다. XML 문서에서 "텍스트 인 것처럼"바이너리 데이터를 저장하는 것은 일반적으로 나쁜 생각입니다. 새 코드를 게시하고 싶을 수도 있습니다 ... –

+0

@MatsPetersson 나는 그가 XML에서 이스케이프 처리되지 않은 바이너리를 저장하고 있다고 생각하지 않습니다. XML 자체가 바이너리에서 "해독"되고있는 것처럼 보입니다. – michaelb958

관련 문제