Перепробывал кучу вариантов из гугла, ничего не работает. Пока остановился на таком, он как мне кажется, наиболее близок к истине
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 строки.
Есть идеи, как побороть эту ошибку? Или есть какой-либо другой код, при котором эта ошибка не возникает?