0
我有一個外部服務爲我創建證書,其中我接收了一個緩衝區(字符串)。我嘗試將此緩衝區加載到Java中的KeyStore中,然後使用「存儲」功能創建.p12文件。但是,存儲函數會引發異常 - 「給定的最終塊未正確填充」。使用KeyStore創建.p12文件
無論我嘗試什麼,我都無法得到這個工作或找到問題的原因。
我的代碼是:
public void createP12Certificate(String userName, String comment) throws KeyStoreException, AdminCertificateException, CertificateException, NoSuchAlgorithmException, IOException
{
KeyStore store = KeyStore.getInstance("PKCS12");
/* Some Code that gets 'buff' etc. */
byte[] byteBuff = hexStringToByteArray(buff);
Arrays.reverse(byteBuff);
InputStream inputStream = new ByteArrayInputStream(byteBuff);
store.load(inputStream, password.toCharArray());
OutputStream outputStream = new FileOutputStream(userName+".p12");
store.store(outputStream,anotherPassword); //Throws Exception
}
非常感謝您!
這是您接收內容的格式? hexStringToByteArray和Arrays.reverse的組合非常奇怪 – pedrofb
我試圖複製當前在C#上運行的代碼,因此可以訪問Java中的.net函數。 Java和C#都使用提供緩衝區的外部Web服務(證書的內容)。由於這是一個十六進制字符串,並且KeyStore需要一個字節數組,所以我需要使用hexStringToByteArray。如果我不反轉字節數組,Java會在「加載」方法中引發異常 - 數據不是PKCS12格式。 C#反轉字節數組,所以我也反轉了它。 Java不再在「加載」中引發異常,但現在它按照我的描述在「存儲」中引發一個異常。 – Adam
在C#和java中,十六進制轉換 - >字節 - >反轉的行爲可能不相同。我建議您確保服務器返回的格式,例如使用支持轉換十六進制字節的文本編輯器作爲Notepad ++。沒有看到這個文件,我無法再幫忙 – pedrofb