从PEM BASE64获取RSA私钥编码的私钥文件

从PEM BASE64获取RSA私钥编码的私钥文件

我有一个私钥文件(PEM BASE64编码)。我想用它来解密一些其他数据。使用Java我试图读取文件并解码其中的BASE64编码数据...这是我试过的代码片段....

import java.io.*;import java.nio.ByteBuffer;import java.security.*;import java.security.spec.PKCS8EncodedKeySpec;import com.ibm.crypto.fips.provider.RSAPrivateKey;import com.ibm.misc.BASE64Decoder;public class GetPrivateKey {
    public static RSAPrivateKey get() throws Exception {
        File privateKeyFile = new File("privatekey.key");
        byte[] encodedKey = new byte[(int) privateKeyFile.length()];
        new FileInputStream(privateKeyFile).read(encodedKey);
        ByteBuffer keyBytes = new BASE64Decoder().decodeBufferToByteBuffer(encodedKey.toString());
        PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(keyBytes.array());
        KeyFactory kf = KeyFactory.getInstance("RSA", "IBMJCEFIPS");
        RSAPrivateKey pk = (RSAPrivateKey) kf.generatePrivate(privateKeySpec);
        return pk;
    }

    public static void main(String[] args) throws Exception {
        PrivateKey privKey = FormatMePlease.get();
        System.out.println(privKey.toString());
    }}

文件“privatekey.key”的内容

-----BEGIN RSA PRIVATE KEY-----
MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAF53wUbKmDHtvfOb8u1HPqEBFNNF
csnOMjIcSEhAwIQMbgrOuQ+vH/YgXuuDJaURS85H8P4UTt6lYOJn+SFnXvS82E7LHJpVrWwQzbh2
QKh13/akPe90DlNTUGEYO7rHaPLqTlld0jkLFSytwqfwqn9yrYpM1ncUOpCciK5j8t8MzO71LJoJ
g24CFxpjIS0tBrJvKzrRNcxWSRDLmu2kNmtsh7yyJouE6XoizVmBmNVltHhFaDMmqjugMQA2CZfL
rxiR1ep8TH8IBvPqysqZI1RIpB/e0engP4/1KLrOt+6gGS0JEDh1kG2fJObl+N4n3sCOtgaz5Uz8
8jpwbmZ3Se8CAwEAAQKCAQAdOsSs2MbavAsIM3qo/GBehO0iqdxooMpbQvECmjZ3JTlvUqNkPPWQ
vFdiW8PsHTvtackhdLsqnNUreKxXL5rr8vqi9qm0/0mXpGNi7gP3m/FeaVdYnfpIwgCe6lag5k6M
yv7PG/6N8+XrWyBdwlOe96bGohvB4Jp2YFjSTM67QONQ8CdmfqokqJ8/3RyrpDvGN3iX3yzBqXGO
-----END RSA PRIVATE KEY-----

几乎所有人都建议使用不愿意使用的Bouncycastle提供商,因为我应该使用符合FIPS标准的提供商,并且不确定BC提供商是否符合FIPS标准。

帮助我摆脱这一点将非常感谢...提前感谢。


达令说
浏览 2500回答 3
3回答

犯罪嫌疑人X

已经注意到已发布密钥的openssl文本标题----- BEGIN RSA PRIVATE KEY -----表示它是PKCS#1。但是,有关密钥的实际Base64内容是PKCS#8。很明显OP复制并将PKCS#1密钥的标题和预告片粘贴到PKCS#8密钥上,原因不明。我在下面提供的示例代码适用于PKCS#8私钥。以下是一些将从该数据创建私钥的代码。您必须使用IBM Base64解码器替换Base64解码。public class RSAToy {     private static final String BEGIN_RSA_PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n"             + "MIIEuwIBADAN ...skipped the rest\n"          // + ...             // + ... skipped the rest          // + ...                + "-----END RSA PRIVATE KEY-----";     public static void main(String[] args) throws Exception {         // Remove the first and last lines         String privKeyPEM = BEGIN_RSA_PRIVATE_KEY.replace("-----BEGIN RSA PRIVATE KEY-----\n", "");         privKeyPEM = privKeyPEM.replace("-----END RSA PRIVATE KEY-----", "");         System.out.println(privKeyPEM);         // Base64 decode the data         byte [] encoded = Base64.decode(privKeyPEM);         // PKCS8 decode the encoded RSA private key         PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);         KeyFactory kf = KeyFactory.getInstance("RSA");         PrivateKey privKey = kf.generatePrivate(keySpec);         // Display the results         System.out.println(privKey);     }}
打开App,查看更多内容
随时随地看视频慕课网APP