從PEM BASE64獲取RSA私鑰編碼的私鑰文件我有一個私鑰文件(PEM BASE64編碼)。我想用它來解密一些其他數(shù)據(jù)。使用Java我試圖讀取文件并解碼其中的BASE64編碼數(shù)據(jù)...這是我試過的代碼片段....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”的內(nèi)容-----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提供商,因為我應(yīng)該使用符合FIPS標(biāo)準(zhǔn)的提供商,并且不確定BC提供商是否符合FIPS標(biāo)準(zhǔn)。幫助我擺脫這一點將非常感謝...提前感謝。
3 回答

犯罪嫌疑人X
TA貢獻(xiàn)2080條經(jīng)驗 獲得超4個贊
已經(jīng)注意到已發(fā)布密鑰的openssl文本標(biāo)題----- BEGIN RSA PRIVATE KEY -----表示它是PKCS#1。但是,有關(guān)密鑰的實際Base64內(nèi)容是PKCS#8。很明顯OP復(fù)制并將PKCS#1密鑰的標(biāo)題和預(yù)告片粘貼到PKCS#8密鑰上,原因不明。我在下面提供的示例代碼適用于PKCS#8私鑰。
以下是一些將從該數(shù)據(jù)創(chuàng)建私鑰的代碼。您必須使用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); }}
添加回答
舉報
0/150
提交
取消