從PEM BASE64 編碼的私鑰檔案取得RSA 私鑰
嘗試從PEM BASE64 編碼的私鑰檔案中擷取私鑰檔案,您可能會遇到類似您所描述的錯誤。這通常是由於使用非標準密鑰格式而導緻密鑰規範處理不當造成的。
解決錯誤
您遇到的錯誤是可能與使用不正確的私鑰解析方法有關。不要依賴潛在的不符合FIPS 的第三方函式庫:
使用sun.security 和DerInputStream 更新了Java 程式碼:
這裡是一個更新的Java 程式碼片段,使用sun.security 和DerInputStream 類別來解析PKCS#1 和PKCS#8 格式的私鑰,同時確保FIPS 合規性:
import sun.security.util.DerInputStream; import sun.security.util.DerValue; import java.io.File; import java.io.IOException; import java.math.BigInteger; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.security.GeneralSecurityException; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.RSAPrivateCrtKeySpec; import java.util.Base64; public static PrivateKey pemFileLoadPrivateKeyPkcs1OrPkcs8Encoded(File pemFileName) throws GeneralSecurityException, IOException { // ... (code as shown in the question) }
錯誤和解決方案的詳細說明:
原始程式碼片段嘗試使用IBM FIPS 提供者解析私鑰,這可能不是最合適的方法。更新後的程式碼使用更標準化的方法以及 sun.security 和 DerInputStream 類別來處理 PKCS#1 和 PKCS#8 格式。這可確保 FIPS 合規性並解決您遇到的錯誤。
以上是如何在 Java 中從 PEM 檔案解析 PKCS#1 和 PKCS#8 私鑰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!