无法通过 openssl 以与 crypt、mkpasswd 或 openssl 通过 cmdline 相同的格式获取密码哈希
Cant get password hash via openssl in c same format as crypt, mkpasswd or openssl via cmdline
我需要通过 C 中的 openssl 库创建散列密码。不幸的是,我无法获得预期的结果
这是我正在使用的代码:
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, "xxx", 3);
SHA256_Update(&sha256, "11111111", 8);
SHA256_Final(hash, &sha256);
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
{
printf("%02x", hash[i]);
}
输出将是
57b2e9dd7f27e02ce026c1a40c7685b4658c2dff55e3a9de93186e545d1c4af1
但我预计
EDgBhRzUlXHcobBLtDfoWalyRFoSMnO1/q.s10aKSY7
因为这是 crypt lib 以及通过 shell 生成的 mkpasswd 或 openssl 的输出。
参见:
mkpasswd -m sha-256 --salt=11111111 xxx
111111$EDgBhRzUlXHcobBLtDfoWalyRFoSMnO1/q.s10aKSY7
或
openssl passwd -5 -salt 11111111 xxx
111111$EDgBhRzUlXHcobBLtDfoWalyRFoSMnO1/q.s10aKSY7
或
printf("%s\n", crypt("xxx", "111111"));
// also prints 111111$EDgBhRzUlXHcobBLtDfoWalyRFoSMnO1/q.s10aKSY7
我需要让它与 openssl 库一起使用。
我创建哈希和盐是完全错误的,还是这只是一个转储格式问题?
该算法不仅仅是简单的 SHA256 哈希。
作为参考,可以在 github (shacrypt(...)) 上找到 OpenSSL 实现。
我需要通过 C 中的 openssl 库创建散列密码。不幸的是,我无法获得预期的结果
这是我正在使用的代码:
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, "xxx", 3);
SHA256_Update(&sha256, "11111111", 8);
SHA256_Final(hash, &sha256);
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
{
printf("%02x", hash[i]);
}
输出将是
57b2e9dd7f27e02ce026c1a40c7685b4658c2dff55e3a9de93186e545d1c4af1
但我预计
EDgBhRzUlXHcobBLtDfoWalyRFoSMnO1/q.s10aKSY7
因为这是 crypt lib 以及通过 shell 生成的 mkpasswd 或 openssl 的输出。
参见:
mkpasswd -m sha-256 --salt=11111111 xxx
111111$EDgBhRzUlXHcobBLtDfoWalyRFoSMnO1/q.s10aKSY7
或
openssl passwd -5 -salt 11111111 xxx
111111$EDgBhRzUlXHcobBLtDfoWalyRFoSMnO1/q.s10aKSY7
或
printf("%s\n", crypt("xxx", "111111"));
// also prints 111111$EDgBhRzUlXHcobBLtDfoWalyRFoSMnO1/q.s10aKSY7
我需要让它与 openssl 库一起使用。 我创建哈希和盐是完全错误的,还是这只是一个转储格式问题?
该算法不仅仅是简单的 SHA256 哈希。
作为参考,可以在 github (shacrypt(...)) 上找到 OpenSSL 实现。