c++ - 散列重定向的 DOS 输出

标签 c++ sha

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

最佳答案

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

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

关于c++ - 散列重定向的 DOS 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770185/

相关文章:

c++ - 将 unicode 字符串转换为字符串

字符串类删除成员函数的C++时空复杂度

java - 使用 SHA-256 算法对数据库中的密码进行加密

javascript - Javascript 和 Python 中哈希的区别

algorithm - 如何将 DigestMethod 设置为 Sha 256 WCF?

c++ - 是否可以使用 Gtk::DrawingArea (GTKmm) 作为合成而不是继承?

c++ - WinHttpGetIEProxyConfigForCurrentUser 能否从 WPAD 获取代理

c++ - FreeImage 不能与 CEGUI 一起工作

c - 安装了 OpenSSL,没有 openssl.h 文件

algorithm - 为什么 SHA2 有 384 位版本?