哈希重定向DOS输出

时间:2013-11-04 14:43:07

标签: c++ sha

我正在尝试使用openssl中的SHA1来散列命令行参数的结果,并且它工作正常。问题是我需要将这个结果与我从SHA1 PHP函数得到的结果进行比较,结果我得到的结果不一样。当我尝试使用fix参数进行哈希时,可以说“警察”结果是一样的,所以我认为问题是我从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控制台获得的输出的字符集。有人可以帮忙吗

1 个答案:

答案 0 :(得分:2)

查看这是否与newline conventions相关。 UNIX正在使用LF,而DOS / Windows正在使用CR/LF

首先尝试使用没有换行符/换行符的单个字符串,如果有效,请添加逻辑以“标准化”您的数据。