У меня появляется сообщение об ошибке при создании экземпляра PKCS8Key, но я не могу понять проблему.когда я вызываю
new org.apache.commons.ssl.PKCS8Key(new FileInputStream(keyPath), pass.toCharArray())
, файл также является правильным файлом двоичного ключа, не является нулевым аргументом.но у меня есть следующая ошибка стека.
java.lang.IllegalArgumentException: Null input buffer
at javax.crypto.Cipher.doFinal(Cipher.java:2161)
at org.apache.commons.ssl.PKCS8Key.decrypt(PKCS8Key.java:437)
at org.apache.commons.ssl.PKCS8Key.decryptPKCS8(PKCS8Key.java:734)
at org.apache.commons.ssl.PKCS8Key.<init>(PKCS8Key.java:237)
at org.apache.commons.ssl.PKCS8Key.<init>(PKCS8Key.java:105)
Это хорошо работает с большим количеством файлов .cer / .key, на данный момент у меня есть только 1 файл с этим сообщением об ошибке .. но для меня это не такочистить поиск ... или понять, почему ввод неправильный.Наконец, мне нужно отправить своему пользователю четкое сообщение об исключении.
@Test
public void sealDocument() throws Exception {
Security.addProvider(new BouncyCastleProvider());
String keyPath = "example.key";
String pass = "keyPass";
String cerPath = "example.cer";
String fileName = "doc.txt";
CertificateFactory fact = CertificateFactory.getInstance("X.509");
FileInputStream is = new FileInputStream(cerPath);
X509Certificate cer = (X509Certificate) fact.generateCertificate(is);
byte[] privateKeyByte = new org.apache.commons.ssl.PKCS8Key(new FileInputStream(keyPath), pass.toCharArray()).getDecryptedBytes();
// Here is my error
// When is creating
KeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyByte);
// java.lang.IllegalArgumentException: Null input buffer
//
// at javax.crypto.Cipher.doFinal(Cipher.java:2161)
// at org.apache.commons.ssl.PKCS8Key.decrypt(PKCS8Key.java:437)
// at org.apache.commons.ssl.PKCS8Key.decryptPKCS8(PKCS8Key.java:734)
// at org.apache.commons.ssl.PKCS8Key.<init>(PKCS8Key.java:237)
// at org.apache.commons.ssl.PKCS8Key.<init>(PKCS8Key.java:105)
//Next lines can be ignored
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
// With 3 arguments I can seal
sealDocument(privateKey, cer, fileName);
}
Мой вопрос заключается в том, что означает сообщение об ошибке, в основном, чтобы добавить
throw new SealDocumentException('a nice error Message');