RSA یک الگوریتم محبوب برای رمزگذاری نامتقارن (کلید عمومی) است که بیش از 40 سال پیش تأسیس شده است. رمزگذاری JWT برای یک گیرنده معین ، به کلید RSA عمومی خود نیاز دارد. رمزگشایی با کلید RSA خصوصی مربوطه صورت می گیرد که گیرنده باید همیشه مخفی نگه دارد.
برای ایجاد رمزنگاری RSA با Nimbus Jose+JWT برای یک کلید عمومی خاص:
رمزنگاری jweencrypter = rsaencrypter جدید (rsapublickey) ؛
برای ایجاد یک DECRYPTER RSA:
jwedecrypter decrypter = rsadecrypter جدید (RSAPRivateKey) ؛
یک جنبه امنیتی کاملاً اساسی در رمزگذاری کلید عمومی ، اطمینان از رمزگذاری داده ها برای گیرنده مورد نظر و نه برخی از طرفین ، که محرمانه بودن داده ها را به خطر می اندازد. یک راه حل ، زیرساخت های کلیدی عمومی است ، مانند استاندارد PKIX / X. 509 (که برای SSL / TLS در اینترنت و در جاهای دیگر استفاده می شود).
رمزگذاری کلید عمومی واقعی یک فرآیند دو مرحله ای است ، برای کار در حول محدودیت RSA که رمزگذاری داده هایی را که بیش از چند صد بایت است ، غیر ممکن می کند. این کتابخانه از این طریق مراقبت می کند ، بنابراین شما فقط باید کلید عمومی ، نام الگوریتم RSA (ALG) و نام الگوریتم رمزگذاری محتوا (ENC) را تهیه کنید تا بتوانید بخشی از داده ها را رمزگذاری کنید ، مانند ادعاهای JWTبشر
اگر کنجکاو هستید بدانید که این دو مرحله رمزگذاری چیست:
- یک کلید Secret AES یا Chacha20 (به نام کلید رمزگذاری محتوا یا CEK) برای انجام رمزگذاری متقارن در بار JWT تولید می شود. این رمزهای متقارن بسیار کارآمد هستند و می توانند متن ساده با اندازه دلخواه (تقریباً) را پردازش کنند. نوع و طول CEK که تولید می شود توسط پارامتر هدر JWE "Enc" تعیین می شود. به عنوان مثال ، A128GCM باعث ایجاد AES CEK 128 بیتی می شود.
- CEK تولید شده ، که متناسب با محدودیت اندازه RSA است ، مطابق پارامتر هدر JWE "ALG" با RSA رمزگذاری می شود و به عنوان بخشی از JWT گنجانده می شود.
دو نوع الگوریتم استاندارد RSA برای رمزگذاری وب JSON (JWE) وجود دارد که توسط پارامتر عنوان JWE "ALG" مشخص شده است:
- RSA-OAEP-256
- RSA-OAEP-384
- RSA-OAEP-512
- RSA-OAEP
شما می توانید JWE "ALG" را با هر یک از الگوریتم های رمزگذاری محتوای زیر ترکیب کنید ، که توسط پارامتر عنوان JWE "ENC" مشخص شده است:
مثال زیر RSA-AAEP-256 را با رمزگذاری A128GCM از JWT نشان می دهد ، جایی که گیرنده java. security. interfaces. rsapublickey برای رمزگذاری JWT استفاده می شود. گیرنده سپس می تواند JWT را با java. security. interfaces. rsapriventkey خود رمزگشایی کند.
برای دیدن کد کامل ، از /src/test/java/com/nimbusds/jwt/encryptedjwttest. java بازدید کنید.
وارد کردن java. util.*؛وارد کردن java. security. interfaces.*؛وارد کردن javax. crypto.*؛واردات com. nimbusds. jose.*؛واردات com. nimbusds. jose. crypto.*؛واردات com. nimbusds. jwt.*؛// آهنگ سازی مطالبات JWT را در حال حاضر تنظیم کنید = تاریخ جدید () ؛jwtclaimsset jwtclaims = جدید jwtclaimsset. builder () . issuer ("https://openid. net") . subject ("alice") . Adudience (arrays. aslist ("https://app-one. com" ، "httpspspspss: //app-two. com ")) . ExpirationTime (تاریخ جدید (اکنون. gettime () + 1000*60*10)) // در 10 دقیقه منقضی می شود . notbeforetime (اکنون) . Issuetime (اکنون) . jwtid (uuid. randomuuid (). toString ()) . build () ؛system. out. println (jwtclaims. tojsonobject ()) ؛// تولید //// درخواست JWT با عنوان RSA-OAEP-256 و 128 بیتی AES/GCM Jweheader Header = New Jweheader (jwealgorithm. rsa_oaep_256 ، EncryptionMethod. a128gcm) ؛// ایجاد شیء رمزگذاری شده JWT رمزگذاری شده JWT = جدید EncryptedJwt (هدر ، jwtClaims) ؛// ایجاد یک رمزگذاری با کلید مشخص شده RSA RSAENCRYPTER ENCRYPTER = NEW RSAENCRYPTER (PublicKey) ؛// رمزگذاری واقعی jwt. encrypt (رمزگذاری) را انجام دهید.// سریال به JWT Compact Form String JWTString = JWT. Serialize () ؛system. out. println (jwtstring) ؛// تولید // // eyjhbgcioijsu0ett0tfucisimvuyyi6ikexmjhhq00ifqq. k52jfwaqjh-/ dxmhtaq7sg5tmuot_mt5dm1r_01wj6zuqhqhjjjjjfo02vpi44wpi44wpi44wpi uru57729ml3v05uaruhck9zv // ssfkdw1vclingl8lfagrus2z95ukukwhizyakpmrgqpkx8azaikaikaikaikaikaikaikaikaikaikaikavikzaziwwewakavivelszlerslerslerslerslarsazrialszlersazixxkxxkxxxxxxxxnxnx pqyzftm5_ul0ukhe2y0atwm8i // zde_rbav14ocrzj6n38x5urvffe5sdphdgsnla. gji_rifwzxjwao9r. oa // e5a-z0n1mw9fbbkhkekehkexvahxifxv e-xonas2sbx_y1kygpto4mibbjirxqejdskykwndxzr // utn9csmfwqwhx1slhmpjkgsnflti9ywbpkh5krx23ihodgosfqoquuhxn0 // y0wkuqh1r3z-fluus6sx9qx6nfvs1nrq-lvn9swt5yx8m9aq_ng8mbwz2 // bfbtv0tjliv74ogndiknxtakd9rswfv0ix4ipa. solijuvysaki-fyuaby// ایجاد یک DECRYPTER با کلید RSADECRYPTER RSADECRYPTER اختصاصی RSADECRYPTER = NEW RSADECRYPTER (PrivateKey) ؛// رمزگشایی jwt. decrypt (decrypter) ؛// بازیابی ادعاهای JWT System. out. println (jwt. getjwtclaimsset (). getissuer ()) ؛؛system. out. println (jwt. getjwtclaimsset (). getSubject ()) ؛system. out. println (jwt. getjwtclaimsset (). getAudience (). اندازه ()) ؛system. out. println (jwt. getjwtclaimsset (). getExpirationTime ()) ؛system. out. println (jwt. getjwtclaimsset (). getnotbeforetime ()) ؛system. out. println (jwt. getjwtclaimsset (). getissuetime ()) ؛system. out. println (jwt. getjwtclaimsset (). getjwtid ()) ؛
Nimbus Jose + JWT
- مثال ها
- JW با محافظت HMAC
- JWS با امضای RSA
- JWS با امضای EC
- JWS با EDDSA / ED25519
- JWS با سریال سازی JSON
- JWT با محافظت HMAC
- JWT با امضای RSA
- JWT با امضای EC
- JWT با امضا ES256K
- JWT با امضا EDDSA / ED25519
- JWs با بار بدون کد
- JWS با سریع بیومتریک اندرویدی
- PS256 با Fips Bouncycastle
- JWS با Google Cloud KMS
- JWT با رمزگذاری RSA
- JWE با کلید مشترک
- JWT امضا و رمزگذاری شده
- JWE با XC20P
- JWE با CEK از پیش تعیین شده
- چارچوب Minting JWS
- اعتبار سنجی نشانه های دسترسی
- ژوز / JWT تجزیه
- تجزیه خوزه ترکیبی
- تجزیه JWT ترکیبی
- نسل JWK
- تبدیل JWK
- انگشت شست JWK
- JWK EXP ، NBF و IAT Times
- انتخاب کنندگان JWK
- بازیابی JWK
- بازیابی مجموعه JWK پیشرفته
- JWK از اشیاء رمزگذاری شده PEM
- مجوزهای X. 509
- کارت هوشمند و استفاده از HSM
استراتژیهای اسکالپ...
ما را در سایت استراتژیهای اسکالپ دنبال می کنید
برچسب :
نویسنده : ناصر تقوایی
بازدید : <-PostHit->
تاريخ : جمعه
6 مرداد
1402 ساعت: 23:32