2

I use the following code generate RSA key pair and convert it to PEM. But when I use the OpenSSL function PEM_read_bio_RSA_PUBKEY is return null.

Java code:

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

My test keys:

-----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-----
Martin Prikryl
  • 188,800
  • 56
  • 490
  • 992
bocai
  • 31
  • 1
  • 4
  • You should `cat` your test keys and add them to the question. You should probably show your `PEMWriter` class, too. These may be helpful: [Getting RSA private key from PEM BASE64 Encoded private key file](http://stackoverflow.com/q/7216969) and [Load RSA public key from file](http://stackoverflow.com/q/11410770). – jww Nov 29 '16 at 22:16
  • My problem has been solved, the reasion is the public key convert to pem and increase "\r" – bocai Dec 02 '16 at 09:47

0 Answers0