1

我正在尝试使用 openssl 中的 SHA1 对命令行参数的结果进行哈希处理,它工作正常。问题是我需要将这个结果与我从 SHA1 PHP 函数获得的其他结果进行比较,而我得到的结果不一样。当我尝试使用修复参数进行散列时,可以说“警察”结果是相同的,所以我认为问题在于我从 DOS 控制台获得的结果是用 Unicode 或 ASCII 编码的。

这就是我获得 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);

问题是我从 PHP SHA1 函数得到的散列值不一样,所以我认为两个函数的实现可能不一样,但后来我尝试了带有固定参数的 SHA1 C++ 函数,结果等于,所以我认为差异可能在于我从 DOS 控制台获得的输出的字符集。有人能帮帮我吗

4

1 回答 1

2

See if this is related to the newline conventions. UNIX is using LF whereas DOS/Windows is using CR/LF.

Try it on a single string with no newline/linefeed characters first and if it works, add logic to "standardize" your data..

于 2013-11-04T14:45:14.763 回答