2013-11-04 50 views
1

我想散列從openssl使用SHA1的命令行參數的結果,它工作正常。問題是我需要比較從SHA1 PHP函數獲得的其他結果,並且得到的結果不一樣。當我嘗試哈希與修復參數可以說「警察」的結果是相同的,所以我認爲問題是,我從DOS控制檯得到的結果是用Unicode或ASCII編碼。散列重定向DOS輸出

這是我如何獲得DOS結果

std::string exec(char* cmd) { 
FILE* pipe = _popen(cmd, "r"); 
if (!pipe) return "ERROR"; 
char buffer[128]; 
std::string result = ""; 
while(!feof(pipe)) { 
    if(fgets(buffer, 128, pipe) != NULL) 
     result += buffer; 
} 
_pclose(pipe); 
return result; 
} 

一切工作正常,我可以湊我從結果得到的數據。

std::string tag = exec_result.substr (found+2,11); 
SHA1((unsigned char *)tag.c_str(), strlen(tag.c_str()), temp); 

的問題是,散列值不是i。從PHP SHA1函數得到了相同的,所以我想可以是這兩者的功能的執行沒有相同的,但是然後我用試過SHA1 C++函數固定的參數和結果是相等的,所以我認爲差異可能是從DOS控制檯得到的輸出字符集。可有人請helpme

+0

也許使用調試器來檢查標籤字符串的內容可以揭示的東西? –

+0

是的,這是我做的,我意識到有一個額外的空間,我沒有注意到。一旦我從我的字符串中刪除了這個空間,那麼這兩個函數(C++和PHP)的結果都是一樣的。謝謝你的時間和你的幫助 – ocr

回答

2

看看這是否與newline conventions有關。 UNIX正在使用LF,而DOS/Windows正在使用CR/LF

嘗試在一個單一字符串,沒有換行/換行字符第一,如果它的工作原理,添加邏輯來「規範」您的數據..

+0

謝謝亞歷山大,問題是一個額外的空間,我沒有注意到 – ocr