Я пытаюсь использовать простой пример, приведенный здесь:
https://github.com/auth0/java-jwt
//HMAC
Algorithm algorithmHS = Algorithm.HMAC256("secret");
//RSA
RSAPublicKey publicKey = //Get the key instance
RSAPrivateKey privateKey = //Get the key instance
Algorithm algorithmRS = Algorithm.RSA256(publicKey, privateKey);
К сожалению, получение ключевых экземпляров для publi c и private ключ не такой простой 1015 * Я преобразовал закрытый ключ в форму DER openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out pkcs8.der -nocrypt
Теперь я могу загрузить закрытый ключ как:
val privateKey = readKeyAsBytes("pkcs8.der")
.run { PKCS8EncodedKeySpec(this) }
.run { KeyFactory.getInstance("RSA").generatePrivate(this) }
as RSAPrivateKey
Однако это не работает для генерации ключа publi c:
val publicKey = readKeyAsBytes("publickey.crt")
.run { X509EncodedKeySpec(this) }
.run { KeyFactory.getInstance("RSA").generatePublic(this) }
as RSAPublicKey
, так как он не работает с InvalidKeyException: invalid key format
. Я не уверен, правильно ли .getInstnace(RSA)
здесь, но я не мог заставить его работать ни с чем другим. Я полагаю, ключ publi c не в формате X509, но мне не удается преобразовать его в него.