簡體   English   中英

使用 OpenSSL 的 SHA -256 密鑰大小 2048 位的 RSA-OAEP

[英]RSA-OAEP with SHA -256 key size 2048 bits using OpenSSL

我正在嘗試解決與如何使用 RSA 加密數據完全相同的用例,使用 SHA-256 作為哈希函數,使用 MGF1 作為掩碼生成函數? ,但我需要更清楚地說明這一點。

上述查詢是在 2013 年提出的。當時 OpenSSL 僅支持 OAEP 填充的 SHA1 哈希(硬編碼)。 在最新的 OpenSSL (1.0.2k) 中,我可以看到使用以下 API 解決了這個問題:

int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
                                    const unsigned char *from, int flen,
                                    const unsigned char *param, int plen,
                                    const EVP_MD *md, const EVP_MD mgf1md)

RSA_public_encrypt()不采用EVP_MD結構作為參數我不知道如何指定它。

如何使用掩碼生成函數在RSA_public_encrypt()調用 SHA-256 模式?

RSA_public_encrypt(...)已棄用; 應改用 EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, ...)

為作為第一個參數傳遞給 EVP_PKEY_encrypt 的上下文配置填充、掩碼生成函數和其他參數:

    EVP_PKEY* evp_key = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL);
    if (evp_key == NULL) {
        // handle error
    }

    EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new(evp_key, NULL);
    if (ctx == NULL) {
        // handle error
    }

    if (EVP_PKEY_encrypt_init(ctx) <= 0) {
        // handle error
    }

    if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0) {
        // handle error
    }
    if (EVP_PKEY_CTX_set_rsa_oaep_md(ctx, EVP_sha256()) <= 0) {
        // handle error
    }
    if (EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, EVP_sha256()) <= 0) {
        // handle error
    }

    if (EVP_PKEY_encrypt(ctx, encrypted, &outlen, data, len) <= 0) {
        // handle error
    }

暫無
暫無

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

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