亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從PEM BASE64獲取RSA私鑰編碼的私鑰文件

從PEM BASE64獲取RSA私鑰編碼的私鑰文件

達令說 2019-08-08 11:00:17
從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標準。幫助我擺脫這一點將非常感謝...提前感謝。
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

已經注意到已發布密鑰的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);
    }}


查看完整回答
反對 回復 2019-08-08
  • 3 回答
  • 0 關注
  • 2676 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號