首頁 >Java >java教程 >如何在 Java 中從 PEM BASE64 編碼的私鑰檔案提取 RSA 私鑰?

如何在 Java 中從 PEM BASE64 編碼的私鑰檔案提取 RSA 私鑰?

Susan Sarandon
Susan Sarandon原創
2024-11-11 01:26:02600瀏覽

How to Extract an RSA Private Key from a PEM BASE64 Encoded Private Key File in Java?

從PEM BASE64編碼的私鑰檔案取得RSA私鑰

在某些場景下,您可能會遇到需要擷取RSA私鑰的情況來自PEM BASE64 編碼的私鑰檔案。嘗試解碼金鑰時,Java 的內建功能可能會導致「InvalidKeySpecException」錯誤。要解決此問題,請考慮以下步驟:

1.了解PKCS 格式:

私鑰有兩種常見的PKCS 格式:PKCS#1 和PKCS# 8。 PKCS#1 較舊,由檔案副檔名「.pem」表示,而 PKCS#8 較新,通常使用副檔名「.key」。

2。辨識金鑰檔案的 PEM 格式:

檢查私鑰檔案中的內容。如果它以“-----BEGIN PRIVATE KEY-----”開頭並以“-----END PRIVATE KEY-----”結尾,則它是 PKCS#8 格式。如果它以“-----BEGIN RSA PRIVATE KEY-----”開頭並以“-----END RSA PRIVATE KEY-----”結尾,則它是 PKCS#1 格式。

3.選擇適當的Java 程式碼:

根據您的私鑰檔案的格式,使用提供的對應程式碼片段:

對於PKCS#8 格式:

byte[] pkcs8EncodedKey = Base64.getDecoder().decode(privateKeyPem);

KeyFactory factory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = factory.generatePrivate(new PKCS8EncodedKeySpec(pkcs8EncodedKey));

對於PKCS#1格式:

DerInputStream derReader = new DerInputStream(Base64.getDecoder().decode(privateKeyPem));
DerValue[] seq = derReader.getSequence(0);
BigInteger modulus = seq[1].getBigInteger();
BigInteger publicExp = seq[2].getBigInteger();
BigInteger privateExp = seq[3].getBigInteger();
// ... Continue extracting the remaining components and construct the RSAPrivateCrtKeySpec

KeyFactory factory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = factory.generatePrivate(keySpec);

透過執行以下步驟並使用適當的Java 程式碼片段,您可以成功從PEM BASE64 編碼的私鑰檔案中取得RSA 私鑰,並將其用於您的特定要求。

以上是如何在 Java 中從 PEM BASE64 編碼的私鑰檔案提取 RSA 私鑰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn