Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从字符串Java生成公钥_Java_Security_Key - Fatal编程技术网

如何从字符串Java生成公钥

如何从字符串Java生成公钥,java,security,key,Java,Security,Key,我有公钥字符串 String publicK = "-----BEGIN PUBLIC KEY-----\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFhTDtuYJ5G5LEHMesnf\n" + "wX9cXZ1b/ozkkpbgtC3ziETiFkOFncbPCskpdbPmXxXv3vrwJ2RQIL2LZLZPe1xT\n" + "AyQY1DdD8hGqIemMwV2NqfFoEomVL5+QOAKCR

我有公钥字符串

String publicK = "-----BEGIN PUBLIC KEY-----\n" +
    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFhTDtuYJ5G5LEHMesnf\n" +
    "wX9cXZ1b/ozkkpbgtC3ziETiFkOFncbPCskpdbPmXxXv3vrwJ2RQIL2LZLZPe1xT\n" +
    "AyQY1DdD8hGqIemMwV2NqfFoEomVL5+QOAKCRiHkGgte6a2+OoTk9JzRP/NVaPkB\n" +
    "sdX1/nIPERYen3uDvUSYq83Ite2oDyaZZxj+/r46SadS/g5jWmeqgVoInJw813y7\n" +
    "Ee2HgYVbnktlLNhqIGj+1OKmwop+GP7Kk5CAkt9fo4VjRRllDaX1yFCZEbDL254n\n" +
    "S+LVOhl4mLBM8764+YVxjyYRC1Nq2rNZfQ602652i+l8u8nGqdiKOKDpjNDvhONP\n" +
    "yQIDAQAB\n" +
    "-----END PUBLIC KEY-----";
我想转换公钥对象

byte[] byteKey = publicK.getBytes();
X509EncodedKeySpec spec = new X509EncodedKeySpec(byteKey);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(spec);
上面的代码引发异常

java.security.InvalidKeyException: invalid key format
at sun.security.x509.X509Key.decode(X509Key.java:387)
at sun.security.x509.X509Key.decode(X509Key.java:403)
at sun.security.rsa.RSAPublicKeyImpl.<init>(RSAPublicKeyImpl.java:84)
at sun.security.rsa.RSAKeyFactory.generatePublic(RSAKeyFactory.java:298)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:201)
java.security.InvalidKeyException:密钥格式无效
位于sun.security.x509.X509Key.decode(X509Key.java:387)
位于sun.security.x509.X509Key.decode(X509Key.java:403)
位于sun.security.rsa.rsaplickeyimpl.(rsaplickeyimpl.java:84)
位于sun.security.rsa.RSAKeyFactory.generatePublic(RSAKeyFactory.java:298)
位于sun.security.rsa.RSAKeyFactory.EngineeGeneratePublic(RSAKeyFactory.java:201)

您的密钥是base64编码的PEM格式。 您必须先删除字符串,然后对其进行解码,然后才能使用keyfactory

    String publicK = "-----BEGIN PUBLIC KEY-----\n"
            + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFhTDtuYJ5G5LEHMesnf\n"
            + "wX9cXZ1b/ozkkpbgtC3ziETiFkOFncbPCskpdbPmXxXv3vrwJ2RQIL2LZLZPe1xT\n"
            + "AyQY1DdD8hGqIemMwV2NqfFoEomVL5+QOAKCRiHkGgte6a2+OoTk9JzRP/NVaPkB\n"
            + "sdX1/nIPERYen3uDvUSYq83Ite2oDyaZZxj+/r46SadS/g5jWmeqgVoInJw813y7\n"
            + "Ee2HgYVbnktlLNhqIGj+1OKmwop+GP7Kk5CAkt9fo4VjRRllDaX1yFCZEbDL254n\n"
            + "S+LVOhl4mLBM8764+YVxjyYRC1Nq2rNZfQ602652i+l8u8nGqdiKOKDpjNDvhONP\n" + "yQIDAQAB\n"
            + "-----END PUBLIC KEY-----";

    String pubKeyPEM = publicK.replace("-----BEGIN PUBLIC KEY-----\n", "").replace("-----END PUBLIC KEY-----", "");

    // Base64 decode the data

    byte[] encodedPublicKey = Base64.decode(pubKeyPEM);

    X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedPublicKey);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    System.out.println(kf.generatePublic(spec));

您确定您的密钥是RSA密钥吗?什么是
publicK
?是。它的RSA密钥only@Jens重新开放。你的“副本”是关于私钥的。这是关于公钥的。@Ejp但问题是相同的。钥匙必须解码!