异常java.security.InvalidKeyException:尝试加载.openssl和.pkcs8密钥时密钥格式无效

异常java.security.InvalidKeyException:尝试加载.openssl和.pkcs8密钥时密钥格式无效,java,encryption,openssl,axis2,Java,Encryption,Openssl,Axis2,在开发axis客户端时,我需要使用publickey.openssl加密字符串,并使用从本地计算机加载的privatekey.pkcs8解密。提前感谢 运行代码时,我会遇到以下异常 java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format at sun.security.rsa.RSAKeyFactory.engineGenera

在开发axis客户端时,我需要使用publickey.openssl加密字符串,并使用从本地计算机加载的privatekey.pkcs8解密。提前感谢

运行代码时,我会遇到以下异常

      java.security.spec.InvalidKeySpecException:      java.security.InvalidKeyException: invalid key format
    at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
    at java.security.KeyFactory.generatePublic(Unknown Source)
    at client.client.readPublicKey(client.java:69)
    at client.client.main(client.java:97)
Caused by: java.security.InvalidKeyException: invalid key format
    at sun.security.x509.X509Key.decode(Unknown Source)
    at sun.security.x509.X509Key.decode(Unknown Source)
    at sun.security.rsa.RSAPublicKeyImpl.<init>(Unknown Source)
    at sun.security.rsa.RSAKeyFactory.generatePublic(Unknown Source)
    ... 4 more
给出路径并进行加密解密:

 PublicKey publicKey = readPublicKey("C:\\publickey.openssl");
        PrivateKey privateKey = readPrivateKey("C:\\privatekey.pkcs8");
        byte[] message = "11111111111111111|10:22:30".getBytes("UTF8");
        byte[] secret = encrypt(publicKey,message);
        byte[] recovered_message = decrypt(privateKey,secret);
        System.out.println(new String(recovered_message,"UTF8"));

您的公钥是DER(二进制)还是PEM(base64文本)?可能是PEM,因为这在openssl中更常见,但您的Java代码正在加载字节,所以应该是DER。感谢Andreas,不幸的是,webservice developer没有为我提供DER或PEM,我一直使用这些pkcs8和openssl文件。如果您在文本编辑器中打开
publickey.openssl
文件,您会看到什么?它是二进制还是文本?如果是文本,它看起来像这样吗:?如果有,请使用openssl将PEM转换为DER。是的,也是一样,谢谢。我将尝试并分享结果。您的公钥是DER(二进制)还是PEM(base64文本)?可能是PEM,因为这在openssl中更常见,但您的Java代码正在加载字节,所以应该是DER。感谢Andreas,不幸的是,webservice developer没有为我提供DER或PEM,我一直使用这些pkcs8和openssl文件。如果您在文本编辑器中打开
publickey.openssl
文件,您会看到什么?它是二进制还是文本?如果是文本,它看起来像这样吗:?如果有,请使用openssl将PEM转换为DER。是的,同样如此,谢谢您尝试并分享结果
 PublicKey publicKey = readPublicKey("C:\\publickey.openssl");
        PrivateKey privateKey = readPrivateKey("C:\\privatekey.pkcs8");
        byte[] message = "11111111111111111|10:22:30".getBytes("UTF8");
        byte[] secret = encrypt(publicKey,message);
        byte[] recovered_message = decrypt(privateKey,secret);
        System.out.println(new String(recovered_message,"UTF8"));