Skip to content

Instantly share code, notes, and snippets.

@AlexBaitov
Last active October 13, 2022 01:18
Show Gist options
  • Select an option

  • Save AlexBaitov/cace8ea07a1a88c6a83caaa3702f3c37 to your computer and use it in GitHub Desktop.

Select an option

Save AlexBaitov/cace8ea07a1a88c6a83caaa3702f3c37 to your computer and use it in GitHub Desktop.
RSA JWT encode && decode Example
import org.bouncycastle.jce.provider.BouncyCastleProvider
import java.security.KeyFactory
import java.security.spec.RSAPrivateKeySpec
import java.math.BigInteger
import java.util.Base64
import pdi.jwt.{Jwt, JwtClaim, JwtOptions}
import scala.language.implicitConversions
// https://github.com/cb372/json-web-tokens/blob/master/core/src/main/scala/jwt/Keys.scala
val bouncyCastleProvider = new BouncyCastleProvider
val privateKey = KeyFactory
.getInstance("RSA", bouncyCastleProvider)
.generatePrivate(
new RSAPrivateKeySpec(
BigInteger.valueOf(1L),
BigInteger.valueOf(2L)
)
)
privateKey.getAlgorithm
// https://www.programcreek.com/scala/org.bouncycastle.jce.provider.BouncyCastleProvider
import java.security.KeyPairGenerator
val generator = KeyPairGenerator.getInstance("RSA", bouncyCastleProvider)
generator.initialize(2048)
val keyPair = generator.generateKeyPair()
keyPair.getPrivate
keyPair.getPrivate.getAlgorithm
keyPair.getPrivate.getFormat
keyPair.getPrivate.getEncoded.mkString
keyPair.getPublic
keyPair.getPublic.getEncoded.mkString("")
import pdi.jwt.JwtAlgorithm
val token = Jwt.encode(JwtClaim("""{"some":"hello"}"""),keyPair.getPrivate,JwtAlgorithm.RS256)
Jwt.decodeRaw(token, keyPair.getPublic, Seq(JwtAlgorithm.RS256), JwtOptions.DEFAULT)
Jwt.decodeRaw(token, Base64.getEncoder.encodeToString(keyPair.getPublic.getEncoded), Seq(JwtAlgorithm.RS256), JwtOptions.DEFAULT)
import org.bouncycastle.jce.provider.BouncyCastleProvider
import java.security.KeyFactory
import java.security.spec.RSAPrivateKeySpec
import java.math.BigInteger
import java.util.Base64
import pdi.jwt.{Jwt, JwtClaim, JwtOptions}
import scala.language.implicitConversions
bouncyCastleProvider: org.bouncycastle.jce.provider.BouncyCastleProvider = BC version 1.52
privateKey: java.security.PrivateKey = org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPrivateKey@3
res0: String = RSA
import java.security.KeyPairGenerator
generator: java.security.KeyPairGenerator = org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyPairGeneratorSpi@1fb19fc4
res1: Unit = ()
keyPair: java.security.KeyPair = java.security.KeyPair@6bd67f43
res2: java.security.PrivateKey = RSA Private CRT Key
modulus: 8a1d19f50a10eed580788308198e9ab78439048ce2e6937a8374be239b15eac29c8c4f97a523ce5b8d84d45568560ac5b8901585f6109e1ac7c6911dbe11572bf8c8b3332f9358f0d1f0e1e778caf9db28c37748b094e5a22b584498de77a574917ecabb2a1dd007d7f3d4cbd40e1f0b4be8d05d11485b422bce813a68fdd9d3404f304a62e9d33f6a4d639f55ea4fcfba681ba9da20e956a721045fa155b5b6e648866d20f44e3c81b9bb48bf079641fdf317e0303e3b3381dc10a5c249edc6426485899029bcec465e325dee1880e73435aec9454434835d85eaad978683383d555a4a4d042e85b76e47f0ebfb7b0d4751ee601709c1655ba04197cebc9a21
public exponent: 10001
private exponent: 24f4a47d6cb41b3405ac3963717336f2e3ee5dc954ed5d88eaa3d23cb4c2a88e6a5520f6f2b921fe5d5fad712cf9d8e80efa7ec7d98f98be91b6101e653d3e96057bae7783c3698906a3edce8203cdd75690f6d9fc65db0c098d14cdd2b9310c7fe1ed5d2767d2c2468677ea1253b4fad0d4faebec33f03744817d12a40548c358b5a8f5805c864a9b3fcd1c6937740994a9b190f08b0b3271bf6b50a6157636c42da717b973f0a2b6def157c4f62e0b5b19087c93ae9c928a2195657206c02776438aea1d87945db00ea7280c6448c1d7b886b9b2c17b6bc17d1a412e5aa39694eba773f4e94fe6097ea7210c26ba3c5d8971ee5eff7cbecb7024cd2a61d201
primeP: d1dad064584cbb18ebb66fe2a2c8e6ee27269719f832173677525eb14daa89547738642a5336b192b9bc498dc729cdd56ffefccbb0409fbc70d1195ece9d95f002ccb31e1a2a3092334fb415397af067dcea46d4868fc21be4fb0d94f83e6355313dc63a8fe8163f58fd36b0a6a1df03876170f3024146e19eab3f2df0e24587
primeQ: a87bd31f5d80f7d00c73cb266ae61f0e4b8006824de76895f437ccaff10295c85ae93210cf706267cd9258a3c089e28fecb8b998c2a1573e717325e3ce970e494ed934ca2b76693d0bde8139010c702ca5dbc774d71134145cd9dfec9588546c7fe9d9ac49c343f69507b718480a19a83c1e0b8f6744561a0ac0eb185c3b8d17
primeExponentP: 1877939e6f711acb500828495b436331571d37b6ce6a40ac9802e189788dae8f4b8b269a8cb32ec6f5a2cf4c9970f54fb24c1f7b3c247cbb42c80e56306ecd217ba2142c294ecbf4efc8962d77532f1e5cf26fa9adbaab1e077781e0e1849c9e3d2c7fa52a4c1bf3ecd331022d9b67de0875c2ee824fcc0cd82c0d24b5161c97
primeExponentQ: 9cae5a4da6d4d2a00594816d7ea7f66582ccd240c755d62aed6c1ecbd7a381cb4acfe6213fe7d17b9aeee7c390c02993929eceea42c56baec42e432430f0c4f6637f16da93c4906596ee1ad9fa21a907bc4e40946594b80bdfb535ca7bdcc63608565e791c379cb269313d92351c3f73f6443297ef7edb5b6878b3a879cd5f8d
crtCoefficient: 6e880dbebc1705f8e793b15cda8a73598477521f5e524b6062a08c9e39839a56fdb93dc4e1f7768b8ff3e7668f72541c34b5ca60152282d23caa2f0f39f0c61d37632604429777de0b5ef34620161fe17925236449521753dbc3db931e7189bf397c34d9d61b290a8869a8791379f1258ec7147c78795b9be97430ac3fc2b6b5
res3: String = RSA
res4: String = PKCS#8
res5: String = 48-1264-6721048136942-12272-122-913111504-1264-8948-1264-932102-126110-1182925-111016-18-43-128120-125825-114-102-73-124574-116-30-26-109122-125116-6635-10121-22-62-100-11679-105-9135-5091-115-124-44851048610-59-72-11221-123-1016-9826-57-58-11129-66178743-8-56-775147-10988-16-47-16-31-25120-54-7-3740-6111972-80-108-27-94438868-104-34119-91116-111126-54-694229-487-41-13-44-53-4414311175-24-48931772916643-50-12758104-3-39-456479487498-23-45631067799-9785-2279-49-7010427-87-3832-2386-8933495-9585-75-74-2672-12210932-127860-127-71-6972-657-10665-3-1323-3248625951-127-3616-91-6273-19-5866100-123-119-11241-68-2070945093-1824-128-255253-82-55696852-12593-123-22-83-105-122-125566185907477446-123-7311071-16-21-5123137181-1896239-6310191-9665-105-50-68-10233231012-1261036-12-92125108-7627525-84579911311554-14-29-1893-5584-1993-120-22-93-4660-76-62-88-1141068532-10-14-7133-29395-8311344-7-40-2414-6126-57-39-113-104-66-111-7416301016162-1065123-82119-125-61105-1196-93-19-50-1263-51-4186-112-10-39-4101-37129-11520-51-46-714912127-31-199339103-46-6270-122119-221883-76-6-48-44-6-21-2051-165568-12712518-92572-6188-75-88-11-12892-12274-10163-5128105551169-108-87-79-112-16-1171150113-6510780-902111854-6045-8923-71115-16-94-74-34-1587-60-10461191258124-109-82-100-110-11833-1071011146-643911867-118-2229-121-10893-8014-89401210072-63-41-72-122-71-78-63123107-6312526654690-93-106-108-21-89115-12-2379-269126-89331238-706093-119113-1894-1124-66-5311236-514297-4612-127-1270-47-38-481008876-6924-21-74111-30-94-56-26-183938-10525-85023541198294-7977-86-1198411956100428354-79-110-71-6873-115-5741-51-43111-2-4-53-8064-97-68112-472594-50-99-107-162-52-7730264248-1105179-762157122-16103-36-2270-44-122-113-6227-28-513-108-86299854961-5858-113-24226388-354-80-90-95-333-12197112-1326570-31-98-856345-16-3069-1212-127-1270-88123-453193-128-9-4812115-5338106-26311475-1286-12677-25104-107-1255-52-81-152-107-5690-235016-4911298103-51-11088-93-64-119-30-113-20-72-71-104-62-95876211311537-29-50-105147378-3952-54431181056111-34-1275711211244-91-37-57116-4117522092-39-33-20-107-12084108127-23-39-8473-6167-10-1077-7324721025-88603011-11310368862610-64-21249259-115232-127-12824119-109-9811111326-53808407391679949872955-74-5010664-84-1042-31-119120-115-82-11375-11738-102-116-7746-58-11-94-4976-103112-1179-7876311236036124-6966-56148648110-5133123-9420444178-53-12-17-56-1064511983473092-14111-87-83-70-85307119-127-32-31-124-100-986144127-91427627-13-20-4549245-101103-348117-62-18-12679-5212-40441336-752228-1052-127-1270-100-829077-90-44-46-965-108-127109126-89-10101-126-52-4664-5785-4242-1910830-53-41-93-127-5374-49-263363-25-47123-102-18-25-61-112-6441-109-110-98-50-2266-59107-82-6046673648-16-60-109912722-38-109-60-112101-106-1826-39-633-877-687864-108101-108-7211-33-7553-54123-36-5854886941212855-100-781054961-110532863115-106850-105-17126-3791104120-77-88121-5195-1152-127-128110-12013-66-68235-8-25-109-7992-38-11811589-12411982319482759698-96-116-9857-125-10286-3-7161-60-31-9118-117-113-13-25102-113114842852-75-54962134-126-4660-86471557-16-5829559938466-105119-341194-1370322231-31121373510073822383-37-61-37-10930113-119-655712452-39-42274110-120105-8812119121-1537-114-572012412012191-101-2311648-8463-62-74-75
res6: java.security.PublicKey = RSA Public Key
modulus: 8a1d19f50a10eed580788308198e9ab78439048ce2e6937a8374be239b15eac29c8c4f97a523ce5b8d84d45568560ac5b8901585f6109e1ac7c6911dbe11572bf8c8b3332f9358f0d1f0e1e778caf9db28c37748b094e5a22b584498de77a574917ecabb2a1dd007d7f3d4cbd40e1f0b4be8d05d11485b422bce813a68fdd9d3404f304a62e9d33f6a4d639f55ea4fcfba681ba9da20e956a721045fa155b5b6e648866d20f44e3c81b9bb48bf079641fdf317e0303e3b3381dc10a5c249edc6426485899029bcec465e325dee1880e73435aec9454434835d85eaad978683383d555a4a4d042e85b76e47f0ebfb7b0d4751ee601709c1655ba04197cebc9a21
public exponent: 10001
res7: String = 48-12613448136942-12272-122-913111503-126115048-1261102-126110-1182925-111016-18-43-128120-125825-114-102-73-124574-116-30-26-109122-125116-6635-10121-22-62-100-11679-105-9135-5091-115-124-44851048610-59-72-11221-123-1016-9826-57-58-11129-66178743-8-56-775147-10988-16-47-16-31-25120-54-7-3740-6111972-80-108-27-94438868-104-34119-91116-111126-54-694229-487-41-13-44-53-4414311175-24-48931772916643-50-12758104-3-39-456479487498-23-45631067799-9785-2279-49-7010427-87-3832-2386-8933495-9585-75-74-2672-12210932-127860-127-71-6972-657-10665-3-1323-3248625951-127-3616-91-6273-19-5866100-123-119-11241-68-2070945093-1824-128-255253-82-55696852-12593-123-22-83-105-122-125566185907477446-123-7311071-16-21-5123137181-1896239-6310191-9665-105-50-68-1023323101
import pdi.jwt.JwtAlgorithm
token: String = eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzb21lIjoiaGVsbG8ifQ.CQip4u4zszYyuWwRlevUfNYuXSdHEY49DrAjwd_9YsfIl-TzwbpY_LdVcg_rj4WVhMcFMYy8B6jCIYGLjLgn43t4twm6PBe6gH6QPxJyxfkvPRLCTP1rnLEfxQj8owziPtkN-oTfLx3LKl92uUfqaVih_I4zIhEQp1l_v8devUoOyMDA6kOyeAoNvLBpEUBphd5ro-urni1rZUHCnMqwwyovRAdJgz9EdhQoMMJif0NuWcg40bHM6XecXVmpqf2x6aQmXf2LbCHe6fSUGuNMqwyZt9RsR85TcUIXmZprWLkU5fNsl7g3K_VZos0CK2W2VJL0_wQufpYWTRm8dDzgCQ
res8: scala.util.Try[String] = Success({"some":"hello"})
res9: scala.util.Try[String] = Success({"some":"hello"})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment