OpenSSL和C语言 - 使用SHA256或SHA512哈希密码

6
我已尽力阅读文档,但它们似乎缺乏信息(也许我看错地方了?)。
我正在尝试使用OpenSSL库创建一个C语言密码哈希程序,可以调用该程序并传递参数,例如散列密码的结束长度、盐长度和所使用的HMAC(SHA256或512)。但是,没有太多关于如何利用API实现此目的的信息。
我看到的最大问题是有一个名为PKCS5_PBKDF2_HMAC_SHA1的函数,但我找不到类似于256或512的函数。。只有通过OpenSSL API可用的SHA1?
任何指导都非常感激。
1个回答

3
你可以使用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()创建一个PBK。将其翻译为中文:一个简单的例子如下,它生成一个随机的盐值,然后使用“密码”、“生成的盐值”和EVP_sha256()函数创建一个PBK。
#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..

与openssl kdf相同 -keylen 32 -kdfopt digest:SHA256 -kdfopt pass:password -kdfopt hexsalt:0000000000000000000000000000000000000000000000000000000000000000 -kdfopt iter:1007 PBKDF2 - alboforlizo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接