2017-04-17 90 views
-2

如何使用OpenSSL支持的格式在Java中生成RSA密钥对?如何在JAVA中生成RSA密钥对(采用openssl格式)

有没有办法像我们在php中那样直接生成它们?

输出应该是这样的:

-----BEGIN PUBLIC KEY----- 
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3Qa9WiabsxGv2uJBNNFn 
    Ai3vEDF7Evr85RlgrviUSzkSupEH29PaazKX04/4M7mEQswVZOHSzkFRXiviImi1 
    c1UrWlZENctS3A6P3RSqOonzrw6CVDJ4Nn/iydWlHhFaHBPpCopS537iHvJIey7K 
    -----END PUBLIC KEY----- 

    -----BEGIN PRIVATE KEY----- 
    MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDdBr1aJpuzEa/a 
    4kE00WcCLe8QMXsS+vzlGWCu+JRLORK6kQfb09prMpfTj/gzuYRCzBVk4dLOQVFe 
    K+IiaLVzVStaVkQ1y1LcDo/dFKo6ifOvDoJUMng2f+LJ1aUeEVocE+kKilLnfuIe 
    8kh7LsplosEQSxpfhjQcxt6qgRQk+eI9kyxczLvt2S0goAoO7rPIhi1LQFI1uUij 
    U18a+vsu9uv/mMAa/R101EZxIJyZZDtjyajPUP3Zo7LfxXZpVgg8xXAE6xY3PGlJ 

    -----END PRIVATE KEY----- 

谢谢

+4

我不明白的问题向下票.. – Jonathan

+0

OpenSSL的 - 它可以使用“的OpenSSL genrsa -out的myKey完成。 pem 1 024',但有没有办法在java中立即做到这一点? –

+0

可能重复的[生成RSA密钥对和编码私人作为字符串](http://stackoverflow.com/questions/1709441/generate-rsa-key-pair-and-encode-private-as-string) – sm4

回答

3

你说OpenSSL支持“的”格式,但OpenSSL的支持多种格式(RSA等)私人密钥,超过一打的取决于你如何计数。

的特定格式告诉你,也许是巧合,是由的Java密码直接支持两种格式的PEM形式,PKCS8未加密的私人和“X.509”(真正的SubjectPublicKeyInfo又名SPKI),供市民和因此可以简单地创建:

//nopackage 
import java.security.*; 
import java.util.Base64; 

public class SO43459993SimpleRSAPEM { 
    public static void main (String[] args) throws Exception { 
     KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
     kpg.initialize(2048); KeyPair kp = kpg.generateKeyPair(); 

     System.out.println ("-----BEGIN PRIVATE KEY-----"); 
     System.out.println (Base64.getMimeEncoder().encodeToString(kp.getPrivate().getEncoded())); 
     System.out.println ("-----END PRIVATE KEY-----"); 
     System.out.println ("-----BEGIN PUBLIC KEY-----"); 
     System.out.println (Base64.getMimeEncoder().encodeToString(kp.getPublic().getEncoded())); 
     System.out.println ("-----END PUBLIC KEY-----"); 

    } 
} 

输出示例:

-----BEGIN PRIVATE KEY----- 
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCiaT/zBxjS6ZBiCbUBiUFirm3/ 
xo+A8LY3yBsffu6/6mO0ZwrXNtrHmpQEdld5/XM+k8vKOE+KTfeUwikKOLnHeuzV5qrO4/WZPDyz 
ggXGqFrgI3/WT8AqTcAmc21CG92Wx+omVaFyl5j5/Sh6aapYl6TG7qX4NXzEln7Ka70Az39nKtqi 
oe7LA5ARjcyOBRPXVg2Oq/O+XSwy/epFHIs83ucswF1j/4Nv4u7juCIQ4+sQFyBUwh2docgH9+Ls 
MQ18a2N3khNbhxD9TkehuSGU+/KHd0OmEXVHx6dxEvvVTG+MYuuqBbUxdnReggTdX5bJUXtzf+RM 
+6yuqauLNlJDAgMBAAECggEAES0WYUpn2q5u4Z9rMC1m59vQsFM8jANpEf8stykCcPOF9edL4zTe 
8GstqkcluzYNwRl6XPmVl+fk/iuGkZksNKeQcpLBj73WFI2lUcq3d6oIaln2xCCNDyxH3QkqDerK 
hY7A+armtyrHN/EJHeEc7d+jwpIspVJqzpOn9xpr07DyPJ7EK2IsoupMrJ3OwAmcTWvCnv0465fr 
t+OOzlHF6m1fQtTKD7kBcKE9vnGdkNbpOxY6VI0p9e0R3ymITeXWFxebq8G7hMO3baD775t55smv 
fbWPl41idvTfwAIgUdfKaEk/28zlXwm6WBt3MBF+jlhbfe3zr5RphxtVdIzIYQKBgQD2iqtSXM6/ 
PrxM2CNnS0RwVNvDcx6+BwemJk+pkfq1BSuXrLbAs3KPfZ51ASHmV9+8IDuV98nJEEKu4einIGUa 
m4GK7gHAq0Ml2ISyXTB+28ZXkgDWqvP044T1RbakBrccDDcbsSiIRznyXkJ2VrTA6+Xufz4rIs2Y 
IkYnwBKPkwKBgQCopFGz/7VqPDRd5RL0pm2YWp85M06SD8zss0lbL+EBnAGy/zRjKYMMVlZpuA+Q 
6od8idyYoOBNpFgf+SGJTs097yUP7Vk98wk4jDqC0Kbd9VGXlUfWwpFeGlcO6zVTtVC6ShLDyBTL 
QoulgIhFmHtjHLsUKhehixhbtDXXfmEAkQKBgDvrR+gkljr0zF8AyNn5+RA0D5VZDUex/bHr7cCQ 
shX8w7OBTolXE6i8Jx7Yv5x0DvRyAQlZx7kOMqa+UQUNYoUs9jcF0Xc6KH+yN84ByB+M2o+99GY3 
9kK2aUITR2hmGWq/rUUVsXwtk2/MaOrJ9/RLYP6t/jYNp1oqOlK+48PxAoGBAJhTM+leA0Nd9f8J 
tsF8wmlnEYLdMQ8FbpguqQfQi3CktXQ0x+D50gEGyy7arlS7Qn3fGH5UccYvt9nJcd1QbFqQ8+0a 
+gzWxXFqWD9osBC0UWqV0DnPrPZO3GwBUD23/J8H4UMuKnoeNXzcSDp0rJ6tiN2B1652sR3D/Q4U 
fRHBAoGAAseKaXqnBWeSS2RE/FZ7meSC0Wge7dTgkTKRRkJfKuOfLvTs1FB6mNVGkffcjltPuxM3 
m79c3lnkD9ub7UZcJtNRY8sv0oM6K6ez1stB9M7qc/ZbgbAE7LzCqgGIywgNVCBAZ4zgSGl0h1SM 
/evMdsYTYUXubxolHGq56o+UL4M= 
-----END PRIVATE KEY----- 
-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAomk/8wcY0umQYgm1AYlBYq5t/8aPgPC2 
N8gbH37uv+pjtGcK1zbax5qUBHZXef1zPpPLyjhPik33lMIpCji5x3rs1eaqzuP1mTw8s4IFxqha 
4CN/1k/AKk3AJnNtQhvdlsfqJlWhcpeY+f0oemmqWJekxu6l+DV8xJZ+ymu9AM9/ZyraoqHuywOQ 
EY3MjgUT11YNjqvzvl0sMv3qRRyLPN7nLMBdY/+Db+Lu47giEOPrEBcgVMIdnaHIB/fi7DENfGtj 
d5ITW4cQ/U5HobkhlPvyh3dDphF1R8encRL71UxvjGLrqgW1MXZ0XoIE3V+WyVF7c3/kTPusrqmr 
izZSQwIDAQAB 
-----END PUBLIC KEY----- 
+0

非常感谢! –