Java 生成 RSA 密钥对并转换为 PEM - 但 OpenSSL 函数 PEM_read_bio_RSA_PUBKEY 返回 null

2024-02-06

我使用以下代码生成 RSA 密钥对并将其转换为 PEM。但是当我使用OpenSSL功能时PEM_read_bio_RSA_PUBKEY是返回null。

Java代码:

public static RSAKeyPair creatKeyPair(int keySize) throws Exception {
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);
    keyGen.initialize(keySize, new SecureRandom());
    return getRSAKeyPair(keyGen.genKeyPair());
}
private static RSAKeyPair getRSAKeyPair(KeyPair keyPair) throws Exception {
    RSAKeyPair rsaKeyPair = new RSAKeyPair();
    rsaKeyPair.PrivateKey = rsaKeyToPEMFormat(keyPair.getPrivate());
    rsaKeyPair.PublicKey = rsaKeyToPEMFormat(keyPair.getPublic());
    return rsaKeyPair;
}

private  static String rsaKeyToPEMFormat(Key key){
    StringWriter writer = new StringWriter();
    //org.bouncycastle.openssl.PEMWriter  bcprov-ext-jdk16-1.46.jar
    PEMWriter pemWriter = new PEMWriter(writer);
    try {
        pemWriter.writeObject(key);    
        pemWriter.close();
        return writer.toString();
    } catch (IOException e) {
        LogLIB.error(e.getMessage(), e);
    }
    return null;
}

C code:

RSA * createRSA(unsigned char * key, int flag) {
    RSA *rsa = NULL;
    BIO *keybio;
    int keylength = strlen(key);
    keybio = **BIO_new_mem_buf(key, -1);** 
    if (keybio == NULL) {
        LOGV( "Failed to create key BIO" );
        return 0;
    }
    if (flag) {
        rsa = PEM_read_bio_RSA_PUBKEY(keybio, &rsa, NULL, NULL); //return null !!!
    } else {
        rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa, NULL, NULL);
    }
    if (rsa == NULL) {
        LOGV( "Failed to create RSA");
        //printf( "Failed to create RSA" );
    }

    return rsa;
}

我的测试键:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCT9uJpsYJUVbZGwv9mWYJRMnYr
I85SkGm9Wb/3+04xaZxQG2GchjQsLRvAc2ZG/CpTpen1q7E4nQeuNgthwI6/0LnE
lIkn1O2bcBGUGpyiXseGvSeCfbyFiefNkC0xsyW/w5f506nP4ukroWGCDeSKHg5S
PrA6WDXiy6HhQ3W6EQIDAQAB
-----END PUBLIC KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCT9uJpsYJUVbZGwv9mWYJRMnYrI85SkGm9Wb/3+04xaZxQG2Gc
hjQsLRvAc2ZG/CpTpen1q7E4nQeuNgthwI6/0LnElIkn1O2bcBGUGpyiXseGvSeC
fbyFiefNkC0xsyW/w5f506nP4ukroWGCDeSKHg5SPrA6WDXiy6HhQ3W6EQIDAQAB
AoGAdi0OAmqS9DaM4ZFmmOFOkvlhpezwIcNToLbo+u+NMSvve4+S84fAbbQNYTUJ
8BIA4FQ4O03IurW4Z6ykhItdtp9m1MvJ+KeyvWO8O7ehzKeFQwDz2EXCdSMe5Lhy
GZzcwQUFP+HuyhvX0PMUFYwkPeIYevkeQ1b5GGZoZess/RECQQDWnTjNU4n++QcY
dyvdGfeGqE8GR5imtIEF8yrPjqbn9fC97SgoqxqpdSpcCkGaX7Mx6pPznavdiV3U
ehjx+uI9AkEAsH9jcMjzQWeZ65ihLgiJkgg1a2U7KVhXC47oVRh4TTyVhZwVXaD0
pTuAm9HwkYUsB9+obuqHIw2EYsigC2PYZQJBAK0vlqTq4xMktnshv/3edIbvz0WM
BT2RsASzJDr2LO5G440AkkWvPga9i/9WL3Z5/8sqN1aCSCywK03JcdPj1ykCQBPg
tP1d1G+4UFCFZxm9ImlM/V80Dn6wkVUe6jGzSNFCEoDyvEFIQGVflzN1aIerHPNi
ECE1zrR28EMD32qI+zUCQQCUiJ3wzjXWud0nIFPZANlimvm1Wq273TAzMflHdSYf
H5r1pNJ+1xwaHxaifafBNfADfsW0CJQzuuizZ/zlmHSv
-----END RSA PRIVATE KEY-----

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 生成 RSA 密钥对并转换为 PEM - 但 OpenSSL 函数 PEM_read_bio_RSA_PUBKEY 返回 null 的相关文章

  • 来自行号的方法名称

    给定特定类源代码 Java C 的行号 是否有一种简单的方法来获取它所属的方法的名称 如果它落入其中 大概使用抽象语法树 这对于将 checkstyle 的输出限制为仅触及的方法很有用 我假设您必须使用抽象语法树来执行 Line gt Me
  • java 拖放

    我尝试熟悉java中的拖放 但我发现的所有教程都是 让我生气 我想要的只是从 JList 包含在名为 UserPanel 的自制 JPanel 中 拖动 PublicUserLabel 并将其放入从 JTabbedPanel 继承的自制类中
  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • 如何重复一段文本中的每个字母?爪哇语

    就像在口吃中一样 如果文本为 dean 并且乘数为 3 则结果将是 dddeeeaaannn 由提供的乘数指定的次数 public static void repeatLetters String text dean int n 3 Str
  • ZeroDateTimeBehavior=convertToNull 在使用 hibernate 的 jdbc url 中不起作用

    通过 extern 属性文件 url 指定如下 jdbc mariadb xxxxx 3306 xxxxx zeroDateTimeBehavior convertToNull 连接工作正常并且能够查询数据库 通过休眠 我创建了一个映射到带
  • Java 错误和警告列表

    在哪里 如何获得所有 java 和 javac 的错误和警告消息的列表 This http mindprod com jgloss compileerrormessages html我认为页面是您所需要的
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • 如何杀死 Java Future?

    我正在开发的服务使用 Future 来并行运行多个任务 每个任务最多可能需要一分钟才能完成 然而 外部库似乎有问题 因为在某些情况下 2 的时间 它不会返回 在这些情况下 我想给出 2 分钟的等待时间 如果还没有返回 我想杀死 future
  • Spring 从 JBoss 上下文加载 PropertySourcesPlaceholderConfigurer

    我有一个使用 PropertySourcesPlaceholderConfigurer 的 spring 3 1 应用程序加载设置 我想管理测试和生产环境 只需从服务器上下文加载设置覆盖本地文件属性中指定的设置 下一个示例在 Tomcat
  • 在 doxygen 中使用 @see 或 @link

    我之前用 Javadoc 记录并使用了标签 see link or see foo and link foo 在我的描述中链接到其他课程 现在我尝试了doxygen 似乎这些标签不兼容 如果我运行 doxygen 完整的标签将被简单地解释为
  • 我的 Kafka 流应用程序刚刚退出,代码为 0,什么也不做

    为了尝试 Kafka 流 我这样做了 public static void main String args final StreamsBuilder builder new StreamsBuilder final Properties
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • BigDecimal汇总统计

    我有一个 BigDecimal 列表 List
  • Spring Security 角色层次结构不适用于 Thymeleaf sec:authorize

    我正在使用 Spring Security 3 2 5 RELEASE 和 ThymeLeaf 2 1 4 RELEASE 我已经在安全上下文中定义了角色层次结构 在我的视图层中我正在使用sec authorize属性来定义菜单项 我希望看
  • 如果 Modelmapper 中的整个属性为空,如何排除它们

    ModelMapper 是否 http modelmapper org http modelmapper org 支持什么排除属性 如果该值为空 我刚刚找到了 PropertyMap 但这对我来说是一种限制 因为我必须描述我想要的特定属性
  • 如何在不使用 -cp 开关的情况下在 Groovy 中自动加载数据库 jar?

    我想简化调用 Oracle 数据库的 Groovy 脚本的执行 如何将 ojdbc jar 添加到默认类路径以便我可以运行 groovy RunScript groovy 代替 groovy cp ojdbc5 jar RunScript
  • 用于生成 ISO 文件的 Maven 插件

    有没有可以生成ISO镜像的maven插件 我需要获取一些模块的输出 主要是包含 jar 的 zip 文件 并将它们组合成一个 ISO 映像 Thanks 现在有一个 ISO9660 maven 插件可以完成这项工作 https github
  • Axis2 的 wsdl2java 在 RPC/Encoded 样式 Web 服务上失败

    Axis2 有替代方案吗 或者让它工作的方式 例如不同的数据绑定 Retrieving document at Exception in thread main org apache axis2 wsdl codegen CodeGener
  • FragmentMap + ActionBar 选项卡

    我一直在尝试插入一个MapView进入一个ActionBar Tab 但我什至无法解决问题 即使谷歌搜索 这是主要活动 Override public void onCreate Bundle savedInstanceState supe

随机推荐