我正在尝试使用 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 控制台获得的输出的字符集。有人能帮帮我吗