openssl生成私钥:
openssl genrsa -out rsa_private_key.pem 1024
基于私钥生成公钥:
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout writing RSA key
1、openssl默认生成私钥为pkcs#1格式,java直接使用会报错(但可被openssl使用,如php可使用openssl函数)
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException:
IOException : algid parse error, not a sequence
2、java需要使用需要新增以下代码,即可使用pkcs#1格式
RSAPrivateKeyStructure asn1PrivKey = new RSAPrivateKeyStructure((ASN1Sequence) ASN1Sequence.fromByteArray(priKeyData));
RSAPrivateKeySpec rsaPrivKeySpec = new RSAPrivateKeySpec(asn1PrivKey.getModulus(), asn1PrivKey.getPrivateExponent());
KeyFactory keyFactory= KeyFactory.getInstance("RSA");
PrivateKey priKey= keyFactory.generatePrivate(rsaPrivKeySpec);
3、pkcs#1格式转换为pkcs#8格式,则java可以正常使用
openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt