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

我使用以下代码生成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代码:

 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-----