Невозможно проверить зашифрованный закрытый ключ ⇐ JAVA
-
Anonymous
Невозможно проверить зашифрованный закрытый ключ
У меня есть контекст ниже:
Я использую openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes для создания файлов ключей и сертификатов.
Затем я использую openssl pkcs8 -in key.pem -out key-encrypted.pem -topk8 для шифрования моего закрытого ключа.
Код работает с key.pem и cert.pem, но имеет проблемы с key-encrypted.pem и сертификат.pem.
Когда он переходит к этой строке для генерации закрытого ключа, отображается ошибка java.security.InvalidKeyException: IOException : DerValue.getBigIntegerInternal, не ожидается 48.
Я загружаю файл сертификата и создаю объект X509Certificate, как показано ниже:
byte[] certData = Files.readAllBytes(certPath); InputStream st = новый ByteArrayInputStream (certData) Фабрика сертификатов certFactory = Фабрика сертификатов.getInstance("X.509"); сертификат = (X509Certificate) certFactory.generateCertificate(st); Затем я загружаю файл своего закрытого ключа, как показано ниже:
List ключи = Files.readAllLines(keyPath); //Я удалил первую и последнюю строку ключевого содержимого: //-----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY----- строки Строковый ключ = String.join("",keys); //Разбираем его в PKCS8 байт [] декодирован = Base64.decodeBase64 (ключ); KeyFactory kf = KeyFactory.getInstance("RSA"); PKCS8EncodedKeySpec ks = новый PKCS8EncodedKeySpec (декодирован); //Теперь я использую kf для генерации закрытого ключа PrivateKey pk = kf.generatePrivate(ks); //Затем я использую следующий код для проверки Подпись s = Signature.getInstance("SHA256withRSA"); s.initSign(ПК); байт [] знак = s.sign(); s.initVerify(certificate.getPublicKey()); s.verify(подпись);
У меня есть контекст ниже:
Я использую openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes для создания файлов ключей и сертификатов.
Затем я использую openssl pkcs8 -in key.pem -out key-encrypted.pem -topk8 для шифрования моего закрытого ключа.
Код работает с key.pem и cert.pem, но имеет проблемы с key-encrypted.pem и сертификат.pem.
Когда он переходит к этой строке для генерации закрытого ключа, отображается ошибка java.security.InvalidKeyException: IOException : DerValue.getBigIntegerInternal, не ожидается 48.
Я загружаю файл сертификата и создаю объект X509Certificate, как показано ниже:
byte[] certData = Files.readAllBytes(certPath); InputStream st = новый ByteArrayInputStream (certData) Фабрика сертификатов certFactory = Фабрика сертификатов.getInstance("X.509"); сертификат = (X509Certificate) certFactory.generateCertificate(st); Затем я загружаю файл своего закрытого ключа, как показано ниже:
List ключи = Files.readAllLines(keyPath); //Я удалил первую и последнюю строку ключевого содержимого: //-----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY----- строки Строковый ключ = String.join("",keys); //Разбираем его в PKCS8 байт [] декодирован = Base64.decodeBase64 (ключ); KeyFactory kf = KeyFactory.getInstance("RSA"); PKCS8EncodedKeySpec ks = новый PKCS8EncodedKeySpec (декодирован); //Теперь я использую kf для генерации закрытого ключа PrivateKey pk = kf.generatePrivate(ks); //Затем я использую следующий код для проверки Подпись s = Signature.getInstance("SHA256withRSA"); s.initSign(ПК); байт [] знак = s.sign(); s.initVerify(certificate.getPublicKey()); s.verify(подпись);
Мобильная версия