小编Paw*_* R.的帖子

如何用C语言在OpenSSL 3.0中从原始数据正确创建RSA密钥?

我对 OpenSSL 相当陌生,我当前的工作任务是将项目的代码从 OpenSSL 1.1.1 更新到 OpenSSL 3.0,但我遇到了一个非常奇怪的问题。

我正在尝试根据给定的原始数据、转换为 BIGNUM 的精确二进制模数和指数创建 RSA 密钥。我尝试按照手册中的描述进行操作,并且密钥创建工作正常,但问题是我尝试使用该密钥(或基于它的 CTX)执行的任何操作都会失败,无论是签名解密还是验证。

这是我创建密钥的代码:

    /* function set up above */
    ctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL);
    if ( ctx == NULL) {
        ERROR("Error: failed to initialize CTX from name.\n");
        goto OPENSSL_ERROR;
    }

    modulus = BN_bin2bn(pubkey->data, pubkey->size, NULL);
    exponent = BN_bin2bn(exp_arr, 3, NULL);
    if ( modulus == NULL || exponent == NULL ) {
        goto OPENSSL_ERROR;
    }

    OSSL_PARAM params[] = {
        OSSL_PARAM_BN("n", &modulus, BN_num_bytes(modulus)*8),
        OSSL_PARAM_BN("e", &exponent, BN_num_bytes(exponent)*8),
        OSSL_PARAM_BN("d", NULL, 0),
        OSSL_PARAM_END …
Run Code Online (Sandbox Code Playgroud)

c openssl cryptography rsa

5
推荐指数
1
解决办法
1823
查看次数

标签 统计

c ×1

cryptography ×1

openssl ×1

rsa ×1