OpenSSL & C - хэш-пароли с SHA256 или SHA512 - PullRequest
1 голос
/ 08 июня 2019

Я старался изо всех сил читать документы, но они, кажется, очень щадящие в информации (может быть, я смотрю не в том месте?)

Я пытаюсь создать хеш пароля в C, используяБиблиотека OpenSSL, в которой можно вызывать программу и передавать ей такие аргументы, как конечная длина хешированного пароля, длина соли и используемый HMAC (SHA256 или 512).Просто не так много информации о том, как использовать API для этого.

Самая большая проблема, которую я вижу, состоит в том, что есть функция с именем PKCS5_PBKDF2_HMAC_SHA1, но я не могу найти аналог для256 или 512 .. Доступен ли только SHA1 через OpenSSL API?

Любые рекомендации приветствуются.

1 Ответ

0 голосов
/ 08 июня 2019

Вы можете использовать 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);

Ниже приведен простой пример, который генерирует случайную соль, затем создает PBK из «пароля», сгенерированной соли и 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..
...