如何在没有p,q等的情况下加载RSA密钥对

天空冲浪者

我正在尝试找到一种仅使用n,e,d将RSA密钥对加载到Openssl的方法。根据RSA的openssl文档,这些组件(p,q等)可以为NULL,但是我设法找到的唯一加载键的功能是i2d_RSAPrivateKey / i2d_RSAPublicKey。不幸的是,这些功能仅适用于DER格式的键。

那么,除了直接将它们处理到RSA结构中之外,还有什么方法可以加载我的密钥(n,e,d)?

w

...这些功能仅适用于DER格式的键。

OpenSSLapp.c具有实用程序用来从文件加载密钥的代码(出于实用目的,文件或内存之间没有区别,因为您可以使用不同的BIO)。其转载如下,并提供多种格式。

那么,除了直接将它们处理到RSA结构中之外,还有什么方法可以加载我的密钥(n,e,d)?

您输入的格式是什么?


EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
                   const char *pass, ENGINE *e, const char *key_descrip)
{
    BIO *key=NULL;
    EVP_PKEY *pkey=NULL;
    PW_CB_DATA cb_data;

    cb_data.password = pass;
    cb_data.prompt_info = file;

    if (file == NULL && (!maybe_stdin || format == FORMAT_ENGINE))
    {
        BIO_printf(err,"no keyfile specified\n");
        goto end;
    }
#ifndef OPENSSL_NO_ENGINE
    if (format == FORMAT_ENGINE)
    {
        if (!e)
            BIO_printf(err,"no engine specified\n");
        else
        {
            pkey = ENGINE_load_private_key(e, file,
                                           ui_method, &cb_data);
            if (!pkey)
            {
                BIO_printf(err,"cannot load %s from engine\n",key_descrip);
                ERR_print_errors(err);
            }
        }
        goto end;
    }
#endif
    key=BIO_new(BIO_s_file());
    if (key == NULL)
    {
        ERR_print_errors(err);
        goto end;
    }
    if (file == NULL && maybe_stdin)
    {
#ifdef _IONBF
# ifndef OPENSSL_NO_SETVBUF_IONBF
        setvbuf(stdin, NULL, _IONBF, 0);
# endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
#endif
        BIO_set_fp(key,stdin,BIO_NOCLOSE);
    }
    else
        if (BIO_read_filename(key,file) <= 0)
        {
            BIO_printf(err, "Error opening %s %s\n",
                       key_descrip, file);
            ERR_print_errors(err);
            goto end;
        }
    if (format == FORMAT_ASN1)
    {
        pkey=d2i_PrivateKey_bio(key, NULL);
    }
    else if (format == FORMAT_PEM)
    {
        pkey=PEM_read_bio_PrivateKey(key,NULL,
                                     (pem_password_cb *)password_callback, &cb_data);
    }
#if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA)
    else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC)
        pkey = load_netscape_key(err, key, file, key_descrip, format);
#endif
    else if (format == FORMAT_PKCS12)
    {
        if (!load_pkcs12(err, key, key_descrip,
                         (pem_password_cb *)password_callback, &cb_data,
                         &pkey, NULL, NULL))
            goto end;
    }
#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) && !defined (OPENSSL_NO_RC4)
    else if (format == FORMAT_MSBLOB)
        pkey = b2i_PrivateKey_bio(key);
    else if (format == FORMAT_PVK)
        pkey = b2i_PVK_bio(key, (pem_password_cb *)password_callback,
                           &cb_data);
#endif
    else
    {
        BIO_printf(err,"bad input format specified for key file\n");
        goto end;
    }
end:
    if (key != NULL) BIO_free(key);
    if (pkey == NULL)
    {
        BIO_printf(err,"unable to load %s\n", key_descrip);
        ERR_print_errors(err);
    }
    return(pkey);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不使用p,q等的情况下加载RSA密钥对

来自分类Dev

如何在没有密钥的情况下使用NSSortDescriptor

来自分类Dev

Google如何在没有密钥的情况下跟踪Google地图的使用情况

来自分类Dev

如何在没有密钥对的情况下从计算机操作EC2实例

来自分类Dev

如何在没有密钥的情况下解码JSON值?

来自分类Dev

在PHP中如何在没有硬编码密钥的情况下进行对称加密

来自分类Dev

我如何在Flutter中没有密钥的情况下获取JSON数据?

来自分类Dev

如何在没有密钥的情况下解码JSON值?

来自分类Dev

在PHP中如何在没有硬编码密钥的情况下进行对称加密

来自分类Dev

如何在没有PEM密钥的情况下SSH进入EC2实例?

来自分类Dev

在没有browserify的情况下如何在浏览器中使用bluebird-q?

来自分类Dev

Swift Json如何在没有顶级密钥和自动生成密钥的情况下进行解码

来自分类Dev

如何在没有自动加载的情况下使用Michel Fortin的PHP Markdown?

来自分类Dev

如何在没有@import的情况下加载组件的SCSS

来自分类Dev

如何在没有单击或PHP加载事件的情况下执行javascript?

来自分类Dev

如何在没有ImageIO.read()的情况下将加载的字节转换为图像

来自分类Dev

如何在没有N + 1问题的情况下计算雄辩的关系并加载整个模型?

来自分类Dev

如何在没有php扩展名的情况下加载php文件

来自分类Dev

如何在没有 jQuery 的情况下检测图像何时加载(或失败)?

来自分类Dev

如何在没有参数的情况下重新加载页面?

来自分类Dev

如何在没有安全消息的情况下通过 WPF WebBrowser 加载 HTML

来自分类Dev

如何在没有P / Invoke的情况下从c#创建挂起的进程?

来自分类Dev

如何在没有lua的情况下确保Redis密钥的100%有条件更新?

来自分类Dev

如何在没有密钥文件的情况下授予Cloud Run服务访问服务帐户凭据的权限?

来自分类Dev

如何在没有产品密钥的情况下将Surface Pro升级到Windows 8.1?

来自分类Dev

如何在停机时间最少或没有停机的情况下更改Azure资源中的密码和密钥

来自分类Dev

如何在没有密钥对/pem 文件的情况下访问 AWS EC2 实例的 SSH

来自分类Dev

如何在没有Maven的情况下使用Gradle

来自分类Dev

如何在没有sudo的情况下执行'iftop'

Related 相关文章

  1. 1

    如何在不使用p,q等的情况下加载RSA密钥对

  2. 2

    如何在没有密钥的情况下使用NSSortDescriptor

  3. 3

    Google如何在没有密钥的情况下跟踪Google地图的使用情况

  4. 4

    如何在没有密钥对的情况下从计算机操作EC2实例

  5. 5

    如何在没有密钥的情况下解码JSON值?

  6. 6

    在PHP中如何在没有硬编码密钥的情况下进行对称加密

  7. 7

    我如何在Flutter中没有密钥的情况下获取JSON数据?

  8. 8

    如何在没有密钥的情况下解码JSON值?

  9. 9

    在PHP中如何在没有硬编码密钥的情况下进行对称加密

  10. 10

    如何在没有PEM密钥的情况下SSH进入EC2实例?

  11. 11

    在没有browserify的情况下如何在浏览器中使用bluebird-q?

  12. 12

    Swift Json如何在没有顶级密钥和自动生成密钥的情况下进行解码

  13. 13

    如何在没有自动加载的情况下使用Michel Fortin的PHP Markdown?

  14. 14

    如何在没有@import的情况下加载组件的SCSS

  15. 15

    如何在没有单击或PHP加载事件的情况下执行javascript?

  16. 16

    如何在没有ImageIO.read()的情况下将加载的字节转换为图像

  17. 17

    如何在没有N + 1问题的情况下计算雄辩的关系并加载整个模型?

  18. 18

    如何在没有php扩展名的情况下加载php文件

  19. 19

    如何在没有 jQuery 的情况下检测图像何时加载(或失败)?

  20. 20

    如何在没有参数的情况下重新加载页面?

  21. 21

    如何在没有安全消息的情况下通过 WPF WebBrowser 加载 HTML

  22. 22

    如何在没有P / Invoke的情况下从c#创建挂起的进程?

  23. 23

    如何在没有lua的情况下确保Redis密钥的100%有条件更新?

  24. 24

    如何在没有密钥文件的情况下授予Cloud Run服务访问服务帐户凭据的权限?

  25. 25

    如何在没有产品密钥的情况下将Surface Pro升级到Windows 8.1?

  26. 26

    如何在停机时间最少或没有停机的情况下更改Azure资源中的密码和密钥

  27. 27

    如何在没有密钥对/pem 文件的情况下访问 AWS EC2 实例的 SSH

  28. 28

    如何在没有Maven的情况下使用Gradle

  29. 29

    如何在没有sudo的情况下执行'iftop'

热门标签

归档