【问题标题】:OpenSSL & C - Hash Passwords w/ SHA256 or SHA512OpenSSL & C - 带有 SHA256 或 SHA512 的哈希密码
【发布时间】:2024-01-21 05:49:01
【问题描述】:

我已尽力阅读这些文档,但它们的信息似乎非常少(也许我找错地方了?)

我正在尝试使用 OpenSSL 库在 C 中创建密码哈希,在该库中可以调用程序并传递参数,例如哈希密码的结束长度、盐长度和使用的 HMAC(SHA256 或 512)。只是没有太多关于如何利用 API 来执行此操作的信息。

我看到的最大问题是有一个名为 PKCS5_PBKDF2_HMAC_SHA1 的函数,但我找不到 256 或 512 的类似函数。是否只有 SHA1 可通过 OpenSSL API 获得?

非常感谢任何指导。

【问题讨论】:

    标签: c hash openssl pbkdf2


    【解决方案1】:

    您可以使用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

    #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..
    

    【讨论】:

      最近更新 更多