2015-12-14 62 views
2


我正在使用Crypto ++的一些測試代碼來適應它。
有一個功能:如何使用Crypto ++將文件內容轉發到StringSink?

void DecryptFile(const char *in, const char *out, const char *passPhrase) 
{ 
    FileSource f(in, true, new DefaultDecryptorWithMAC(passPhrase, new FileSink(out))); 
} 

其中DecryptFile#define DecryptFile DecryptFileW(我在Windows上)。

所以,如果cpass是正確的,那麼name_f.c_str()文件的內容被寫入decrypted_alphabet.txt文件解密通過DecryptFile(name_f.c_str(), "decrypted_alphabet.txt", cpass);
調用。

現在的問題:我找不到將文件內容轉發到StringSink而不是文件的方式!我試着手動調用此:

string out; 
FileSource (in, true, new DefaultDecryptorWithMAC(cpass, new StringSink(out))); 

但這返回一些蹩腳的字符,如ъ!$5(#(每一個新的時間)。也許我不能很好地解釋我的問題,所以,這裏的一段代碼,在那裏我嘗試破解一個4位數的保護txt文件:http://pastebin.com/FJng91Y6

回答

1

如何轉發文件內容與加密+到StringSink?
...
現在的問題:我找不到將文件內容轉發到 StringSink而不是文件的方式!我試着手動調用此:

string out; 
FileSource (in, true, new DefaultDecryptorWithMAC(cpass, new StringSink(out))); 

這是按預期工作。


但這返回一些蹩腳的字符,如ъ!$或5(#(每一個新的時間)。也許我不能很好地解釋我的問題,所以,這裏的一段代碼,在那裏我試着破解4位保護的txt文件

是的,這聽起來是正確的(如果我正確地閱讀它),你正在生成的4位數的密碼,碰撞,爲避免衝突,則需要更長的密碼。


也許你應該完成列舉的組合,而不是在第一場比賽停止處理:

if (strlen(cpass) > 0){ 
    printf("Alphabet password is: %s\n", cpass); 
    return; 
} 

收集所有潛在的解密,然後再分析它們找一個「好」的解密。也許你應該使用PIN將它們保存到一個文件:

  • decrypt.1234
  • decrypt.4287
  • decrypt.6862
  • decrypt.8946
+0

感謝您的回答,我會嘗試 – Groosha

相關問題