Я пытаюсь использовать простой пример, приведенный здесь:
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);
К сожалению, получить экземпляры ключей для открытого и закрытого ключа не так просто.
- Я следил за Как создать открытый и закрытый ключ с помощью openssl? для генерации открытого и закрытого ключа.
- Я преобразовал закрытый ключ в форму 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
Однако это не работает для создания открытого ключа:
val publicKey = readKeyAsBytes("publickey.crt") .run { X509EncodedKeySpec(this) } .run { KeyFactory.getInstance("RSA").generatePublic(this) } as RSAPublicKey
так как это не удается с InvalidKeyException: invalid key format
. Я не уверен, правильно ли здесь .getInstnace(RSA)
, но я не смог заставить его работать ни с чем другим. Я предполагаю, что открытый ключ не в формате X509, но мне не удается преобразовать его в него.