我已经尽力阅读了文档,但是它们似乎很少提供信息(也许我在错误的位置搜索?)
我正在尝试使用OpenSSL lib在C中创建一个密码哈希器,可以在其中调用程序并传递参数,例如哈希密码的结尾长度,盐长度和所使用的HMAC(SHA256或512)。只是关于如何利用API来执行此操作的信息很少。
我看到的最大问题是,有一个名为PKCS5_PBKDF2_HMAC_SHA1
的函数,但找不到256或512的相似函数。通过OpenSSL API仅提供SHA1吗?
非常感谢任何指导。
答案 0 :(得分:0)
您可以使用PKCS5_PBKDF2_HMAC
,它允许您定位特定的摘要算法。
int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
const unsigned char *salt, int saltlen,
int iter, const EVP_MD *digest, // <<==== HERE
int keylen, unsigned char *out);
下面显示一个简单的示例,该示例生成一个随机盐,然后根据“密码”,生成的盐和EVP_sha256()
#include <openssl/evp.h>
#include <openssl/rand.h>
#include <openssl/bio.h>
int main(int argc, char *argv[])
{
int iter = 1007;
unsigned char salt[32] = {0};
RAND_bytes(salt, sizeof(salt));
unsigned char key[32] = {0};
PKCS5_PBKDF2_HMAC("password", 8,
salt, sizeof(salt),
iter, EVP_sha256(),
sizeof(key), key);
BIO *bio = BIO_new_fp(stdout, BIO_NOCLOSE);
BIO_dump(bio, (const char*)salt, sizeof(salt));
BIO_dump(bio, (const char*)key, sizeof(key));
BIO_free(bio);
}
输出(可变)
0000 - a7 ca ac f4 43 b0 2d 48-2b f6 d5 67 7e d2 5c b4 ....C.-H+..g~.\.
0010 - c5 82 1d 4d b1 00 cd 1e-85 91 77 4c 32 3e f3 c8 ...M......wL2>..
0000 - 48 8f be 5a e9 1c 9e 11-d8 95 cb ed 6d 6f 36 a2 H..Z........mo6.
0010 - 38 e6 db 95 e1 d7 a6 c0-8a 2f 3a f6 e1 74 e9 b9 8......../:..t..