@galliard

Как создать jwt токен и подписать его приватным сертификатом по алгоритму RSA?

Перепробывал кучу вариантов из гугла, ничего не работает. Пока остановился на таком, он как мне кажется, наиболее близок к истине
val keyFactory = KeyFactory.getInstance("RSA")
        val keyBytes: ByteArray = Base64.getDecoder().decode(privateKey)
        val pkcs8EncodedKeySpec = PKCS8EncodedKeySpec(keyBytes)
        val prvKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec)

        val jwt = Jwts.builder()
            .setHeaderParams(headers)
            .setClaims(claims)
            .signWith(prvKey, SignatureAlgorithm.RS256)
            .compact()

        println(jwt)


Однако при запуске получаю такую вот ошибку

java.io.IOException: extra data at the end
	at java.base/sun.security.util.DerValue.<init>(DerValue.java:432) ~[na:na]
	at java.base/sun.security.util.DerValue.<init>(DerValue.java:344) ~[na:na]
	at java.base/sun.security.pkcs.PKCS8Key.<init>(PKCS8Key.java:96) ~[na:na]
	at java.base/sun.security.rsa.RSAPrivateCrtKeyImpl.<init>(RSAPrivateCrtKeyImpl.java:162) ~[na:na]
	at java.base/sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(RSAPrivateCrtKeyImpl.java:92) ~[na:na]
	at java.base/sun.security.rsa.RSAKeyFactory.generatePrivate(RSAKeyFactory.java:348) ~[na:na]
	at java.base/sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:249) ~[na:na]
	at java.base/java.security.KeyFactory.generatePrivate(KeyFactory.java:389) ~[na:na]


Нагуглить что-то внятное об ошибке мне тоже не удалось.

Приватный ключ у меня хранится в БД в виде base64 строки.

Есть идеи, как побороть эту ошибку? Или есть какой-либо другой код, при котором эта ошибка не возникает?
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
@basili4-1982
ключ как то странно создается.
private static KeyPair generateKeyPair() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // Размер ключа
        return keyPairGenerator.generateKeyPair();
    }
попробуйте так
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы