【问题标题】:hashing redirected DOS output散列重定向的 DOS 输出
【发布时间】:2013-11-04 22:59:52
【问题描述】:

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

【问题讨论】:

  • 也许使用调试器检查标签字符串的内容可能会发现什么?
  • 是的,这就是我所做的,我意识到还有一个额外的空间我没有注意到。一旦我从字符串中删除了该空间,两个函数(C++ 和 PHP)的结果都相同。感谢您的时间和帮助

标签: c++ sha


【解决方案1】:

看看这是否与newline conventions 有关。 UNIX 使用LF,而 DOS/Windows 使用CR/LF

首先在没有换行符/换行符的单个字符串上尝试它,如果可行,请添加逻辑以“标准化”您的数据..

【讨论】:

  • 感谢 Alexander,问题是我没有注意到多余的空间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2011-06-04
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多