Java - 从.DER文件

时间:2017-08-05 18:07:50

标签: java private-key pem der pkcs#1

我最初拥有一个受密码保护的PEM文件,其中包含一个使用BouncyCastle读入Java应用程序的私钥。 PEM文件以

开头

-----开始RSA私钥-----

这让我相信它是PKCS#1格式。我想生成一个二进制文件并将私钥读入Java程序,而不是使用PEM文件。根据{{​​3}},我使用以下 openssl 代码生成DER文件:

openssl pkcs8 -topk8 -nocrypt -in private.pem -outform der -out private.der

然后使用此Java代码尝试读取DER文件:

Path path = Paths.get(privateKeyLocation);
        byte[] byteArray = Files.readAllBytes(path);

        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(byteArray);

        PrivateKey privKey;
        try {
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            privKey = keyFactory.generatePrivate(keySpec);
        } catch (InvalidKeySpecException e) {
            logger.error("error with jwt", e);
            return null;
        } catch (NoSuchAlgorithmException e) {
            logger.error("error with jwt", e);
            return null;
        }

但是我遇到了这个错误:

java.lang.NoClassDefFoundError: com/rsa/asn1/ASN_Exception
at com.rsa.jsafe.provider.JS_KeyFactory.b(Unknown Source)
at com.rsa.jsafe.provider.JS_KeyFactory.engineGeneratePrivate(Unknown Source)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
...

我不确定导致此错误的原因,并想知道是否有更好的方法可以使用BouncyCastle读取DER文件?

1 个答案:

答案 0 :(得分:0)

它最终成为一个正在改变private.der文件路径的maven问题。使用绝对路径解决了这个问题。