Java 使用私钥解码SecretKey

Java 使用私钥解码SecretKey,java,spring,spring-boot,rsa,public-key-encryption,Java,Spring,Spring Boot,Rsa,Public Key Encryption,我正在尝试从使用私钥加密的.pem文件加载AES SecretKey SecretKey loadAESKeyfromCertFile(String filename, PrivateKey prv) { try { FileInputStream in = new FileInputStream(filename); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); c

我正在尝试从使用私钥加密的.pem文件加载AES SecretKey

SecretKey loadAESKeyfromCertFile(String filename, PrivateKey prv) {
    try {
        FileInputStream in = new FileInputStream(filename);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, prv);
        byte[] b = new byte[256];
        in.read(b);
        byte[] keyb = cipher.doFinal(b);
        return new SecretKeySpec(keyb, "AES");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

但是我一直得到
java.security.InvalidKeyException:没有安装的提供程序支持此密钥:sun.security.rsa.RSAPrivateCrtKeyImpl

您确定这不是说pem文件有私钥,而pem文件是用密码加密的吗?不,它不是用密码加密的,而是用私钥加密的。我有私钥和公钥,但是,我需要检索密钥@因为Underflow严重这对你有帮助吗?不幸的是,没有。与您指出的情况不同,我有3个证书,我只需要使用PrivateKey对pem文件进行解密。不幸的是,您的代码没有意义,您的注释也没有提供太多的说明。我们可以推断,您正在尝试使用RSA私钥初始化AES,这当然会导致您看到的异常。将某个文件称为“pem”文件是不够的,因为所有类型的不兼容加密格式都可以合理地描述为pem文件,尽管我不认为它们中有任何一个会持有AES秘密密钥。请添加一些澄清信息。你确定这不是说pem文件有私钥,并且pem文件是用密码加密的吗?不,它不是用密码加密的,而是用私钥加密的。我有私钥和公钥,但是,我需要检索密钥@因为Underflow严重这对你有帮助吗?不幸的是,没有。与您指出的情况不同,我有3个证书,我只需要使用PrivateKey对pem文件进行解密。不幸的是,您的代码没有意义,您的注释也没有提供太多的说明。我们可以推断,您正在尝试使用RSA私钥初始化AES,这当然会导致您看到的异常。将某个文件称为“pem”文件是不够的,因为所有类型的不兼容加密格式都可以合理地描述为pem文件,尽管我不认为它们中有任何一个会持有AES秘密密钥。请添加一些澄清信息。