簡體   English   中英

OpenSSL & C - 使用 SHA256 或 SHA512 的哈希密碼

[英]OpenSSL & C - Hash Passwords w/ SHA256 or SHA512

我已經盡最大努力閱讀文檔,但它們的信息似乎非常少(也許我找錯了地方?)

我正在嘗試使用 OpenSSL lib 在 C 中創建一個密碼散列器,其中可以調用程序並傳遞參數,例如散列密碼的結束長度、salt 長度和使用的 HMAC(SHA256 或 512)。 關於如何利用 API 來做到這一點的信息並不多。

我看到的最大問題是有一個名為PKCS5_PBKDF2_HMAC_SHA1的函數,但我找不到 256 或 512 的類似函數。是否只有 SHA1 可通過 OpenSSL API 使用?

非常感謝任何指導。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM