gpt4 book ai didi

c++ - Openssh 程序化 MD5 哈希摘要与 shell 命令输出不匹配

转载 作者:行者123 更新时间:2023-12-04 03:37:04 42 4
gpt4 key购买 nike

我正在使用 openssl 库试验 MD5 哈希。当我运行下面的代码时:

std::string test("123");    // salt
test.append("TestPhrase"); // password
unsigned char buffer[test.size()];
strcpy((char *)buffer, test.c_str());
unsigned char digest[MD5_DIGEST_LENGTH];
MD5_CTX(ctx);
MD5_Init(&ctx);
MD5_Update(&ctx, buffer, test.size());
for(int i = 0; i < MD5_DIGEST_LENGTH; ++i)
{
printf("%02x", digest[i]);
}
putchar('\n');

我一直得到的哈希值为:

ad9c231a6c45cccecc3b558545e7fd75

我使用 Openssl 文档作为引用,并环顾四周看看其他人是如何做的。它当然不是最干净的代码,但我不认为这是不正确的。但是,当我尝试运行 openssl 命令时,它使用相同的库并且我认为是相同的哈希函数,但我得到了一个完全不同的值:

openssl passwd -quiet -salt "123" -1 "TestPhrase"

$1$123$PWLKL9JcywaTF.UrzC7ov/

我还尝试了 Apache 变体算法 -apr1,它也会生成一个不匹配的散列。我假设这一定是我在屏幕上显示位的方式,但这似乎是我发现的每篇文章的方式。我错过了什么?

最佳答案

openssl passwd 的文档针对 -1 选项说:使用基于 MD5 的 BSD 密码算法 1。这与您正在做的使用 MD5 不同。只需采用 md5 即可生成相当容易破解的密码。

你可以浏览一下md5crypt function在 openssl passwd 工具中执行以查看实际过程涉及的更多。例如它包括 a loop重复 (1000x) 调用 EVP_DigestUpdate()

很难找到基于 MD5 的 BSD 密码算法 1 的正确描述,但这篇博文做得很好:Password hashing with MD5-crypt in relation to MD5


如果您确实想使用 OpenSSL 工具重现当前结果,您可以像这样使用 dgst:

$ printf 123TestPhrase | openssl dgst -md5   
ad9c231a6c45cccecc3b558545e7fd75

关于c++ - Openssh 程序化 MD5 哈希摘要与 shell 命令输出不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66681465/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com