Example of encryption and decryption with key RSA between app's run on Java and Node JS.
Dependencies relevant used:
App | Dependency | Version |
---|---|---|
Java | nimbus-jose-jwt | 8.5.1 |
NodeJs | jose | 1.23.0 |
Before execute put your files private and public key foder keys:
- private_key.der
- public_key.der
Generate JWK more information.
Unix
$ cd app-java
$ ./gradlew run
Windows
$ cd app-java
$ gradlew.bat run
1.2 Example response
...
2020-02-20T13:39:41,131 [ INFO] [ main] [o.e.App ] [] JWK RSA: {"p":"7cfFEz_cdiYT7-V2qiuyZlR2yAaXeSzpLQAjRc41cITsxj5SsvsFVeaXfXi6easXjCbTgtgTvPIyiH6KTQAbnzowKFv7KaJpycsR5QtDYzR5XNyVUSBWlqKRezD-faZA5btUnNaVEAQuBgbzhXT-65j-0uaZoxtQEseu6A5VNDE","kty":"RSA","q":"zEQx1tW7RbiaEC_XGJdd5NJXETml2sleYdKSEw10Y7UoHGw7O1YszDkSqa8dnEwneeSuddGkv2uU8vGl2H0c-v8O3uIiWsv98uwknHX_BHvKzYMPOTbmylZlYjRo_xloHtXZueAB_cqwxLTvalHC8JA1nmfiHvYQie_A-_BWSmk","d":"F-7Ow_ZI6v0ZBhFZ2cgYbHVKaL_edtpxFBmVfnczaHM4Ty4cnKyZ_affTP5a5zEj56lnaIQz85aQYjVlHlDXYNwfACjNIkU69GFoPr8BdsfEtoZORftkJ4ShSedirusFMVFIBgRnOdfokJIw_5tM9LjmzfZHw_xGbFg47ifhfufsKYoEMqu6jA9KVSwJhLMC29CXf0tADwWfn_P-D8fkL-ZwSJg4LbWz0nLP_STxaau7pnaE_mnuJYh2rvg-nlcsRQkFwQ_6sOjNq2Igv4i8cW0vasoEcYB_I8AAcuncEk4oe-fRPird1Uua_QSSoEWpjQgQRTedU1nomyPAcsW2gQ","e":"AQAB","use":"sig","kid":"fff4231f-37bd-4594-8ccf-81bcbcc26266","qi":"tQrwtQ3yItyYSZddRak7eOmm-vBODxZ8XNjlpsx_G5EGDfoWCUIfTYBGlZKPg1rdOPAQrGDFPRJoYPQUNPc9Uyny2s9eAR1Auu94dgSHxxaBsF76JZuPG6QoN1nNaLTXUIRNb2xevLanjl93sPCg7MFU3EBMR4ELGW0R6ov12qk","dp":"lsxZ7OJUU83EWSEih7ucsY8hoaukhuH3o2Vx-URU2d5DN1qxIfdWo-rQ6m8VfDIIhgbdnx6gLfVAHRZ7aWgHHI1Pm1jySa5J_wM9fxAMla7ixQTT4ZZrs664KvOggllc0RVkDO99q6Gq-oGQEXRoc0wdV-2NREb_GlnvUBY-7RE","dq":"KDm9vtr0ODS0Uj-5kiQs32T0tHWvzbgeGBGJpqrdos0ICyDdQUAlLkqG_Fd580-j7oM0QAt68B9Vg8pGqK1qyZr06LuLnGnTpsUOKKmsAMwIEhSfKNtA89Ozv3UmwCXWtUvTxqDwg3Qo_3PKOhvD0e_0Py-h_grjEubeED8yHxE","n":"vbqIZng9Oq6W56QWw7Ths3Elv9iWFgOm5SwtNm39M8OzZrqY_7JrJuuvRCWHN3ZbYEDggS4fpCtaKtnMJzPMJyBLMgE3foJoKMNbI56GI-W5h4KMaTa41hCPo53qlKFG5IwiSgXsELHyNCvF9mjetjPSwPRw6X0WGSovVBlhuULh4koFM4j4N4xp8OYLXseSDzi5Qk52nzkN_UaEuwX0DdGhwvDMxzyGBrmuQthCBOgsK7fWEkLciBktsd2jkmVOVMjSmiuhYamPE6wuwIIKXE36IIP4iR_7AesCxSGYcBVc8oyLG6sHAB7e0cwShBhn5zv6EDTMuCOjSG7q-n6SGQ"}
...
Structure JWK generate base on private and public key with algorithm RSA.
{
"p": "7cfFEz_cdiYT7-V2qiuyZlR2yAaXeSzpLQAjRc41cITsxj5SsvsFVeaXfXi6easXjCbTgtgTvPIyiH6KTQAbnzowKFv7KaJpycsR5QtDYzR5XNyVUSBWlqKRezD-faZA5btUnNaVEAQuBgbzhXT-65j-0uaZoxtQEseu6A5VNDE",
"kty": "RSA",
"q": "zEQx1tW7RbiaEC_XGJdd5NJXETml2sleYdKSEw10Y7UoHGw7O1YszDkSqa8dnEwneeSuddGkv2uU8vGl2H0c-v8O3uIiWsv98uwknHX_BHvKzYMPOTbmylZlYjRo_xloHtXZueAB_cqwxLTvalHC8JA1nmfiHvYQie_A-_BWSmk",
"d": "F-7Ow_ZI6v0ZBhFZ2cgYbHVKaL_edtpxFBmVfnczaHM4Ty4cnKyZ_affTP5a5zEj56lnaIQz85aQYjVlHlDXYNwfACjNIkU69GFoPr8BdsfEtoZORftkJ4ShSedirusFMVFIBgRnOdfokJIw_5tM9LjmzfZHw_xGbFg47ifhfufsKYoEMqu6jA9KVSwJhLMC29CXf0tADwWfn_P-D8fkL-ZwSJg4LbWz0nLP_STxaau7pnaE_mnuJYh2rvg-nlcsRQkFwQ_6sOjNq2Igv4i8cW0vasoEcYB_I8AAcuncEk4oe-fRPird1Uua_QSSoEWpjQgQRTedU1nomyPAcsW2gQ",
"e": "AQAB",
"use": "sig",
"kid": "fff4231f-37bd-4594-8ccf-81bcbcc26266",
"qi": "tQrwtQ3yItyYSZddRak7eOmm-vBODxZ8XNjlpsx_G5EGDfoWCUIfTYBGlZKPg1rdOPAQrGDFPRJoYPQUNPc9Uyny2s9eAR1Auu94dgSHxxaBsF76JZuPG6QoN1nNaLTXUIRNb2xevLanjl93sPCg7MFU3EBMR4ELGW0R6ov12qk",
"dp": "lsxZ7OJUU83EWSEih7ucsY8hoaukhuH3o2Vx-URU2d5DN1qxIfdWo-rQ6m8VfDIIhgbdnx6gLfVAHRZ7aWgHHI1Pm1jySa5J_wM9fxAMla7ixQTT4ZZrs664KvOggllc0RVkDO99q6Gq-oGQEXRoc0wdV-2NREb_GlnvUBY-7RE",
"dq": "KDm9vtr0ODS0Uj-5kiQs32T0tHWvzbgeGBGJpqrdos0ICyDdQUAlLkqG_Fd580-j7oM0QAt68B9Vg8pGqK1qyZr06LuLnGnTpsUOKKmsAMwIEhSfKNtA89Ozv3UmwCXWtUvTxqDwg3Qo_3PKOhvD0e_0Py-h_grjEubeED8yHxE",
"n": "vbqIZng9Oq6W56QWw7Ths3Elv9iWFgOm5SwtNm39M8OzZrqY_7JrJuuvRCWHN3ZbYEDggS4fpCtaKtnMJzPMJyBLMgE3foJoKMNbI56GI-W5h4KMaTa41hCPo53qlKFG5IwiSgXsELHyNCvF9mjetjPSwPRw6X0WGSovVBlhuULh4koFM4j4N4xp8OYLXseSDzi5Qk52nzkN_UaEuwX0DdGhwvDMxzyGBrmuQthCBOgsK7fWEkLciBktsd2jkmVOVMjSmiuhYamPE6wuwIIKXE36IIP4iR_7AesCxSGYcBVc8oyLG6sHAB7e0cwShBhn5zv6EDTMuCOjSG7q-n6SGQ"
}
-
On file node-app/index.js is defined in a const jwkRsa with value generated by app-java.
-
Execute next command for encrypt text
Hello************************************************
Unix
$ cd node-app
$ node index.js
Windows
$ cd node-app
$ node index.js
- This generate message encrypted how next example response:
....
-----------------------------------------------------------------
Data Encrypted: eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAifQ.Y3zoth2zfHoVxKyFSwRE9cZLNy3HNe8ftyTYh7PBa8afe9AOXl_bEPBej-PxK1BC77ohyToHjz35k4TS7bNV1Zhvd8d-YIc_cnpMgVKlQCwgCqyEcfVcus5H2gVnDxwZ4B05EuRqz2mIKZgkMCUfcZy8yRA5T0gtlz9b7lQB30v3HF4fdJLcbODYqgfV9pR3SV3WvDnWOaxiOR8GNWDUVLAbrsBLPCsky8P3LgxLsjnH-
uILqP5FbvH93y01kupgm2pZz8mr1JQOitnnPjLScc5ydNteovufhaXJMgWHuM9w6gEzEFfRdq5DBikxuAQ9YOJ8tLuZsx2iQFh7qs7A4w.K7oRT1B4d4fHT2Jd_vJ4rg.ndpojuH49Xi6Y6MQTGSSyT5NfMjhgLt356awoViAcev_SfQrJVVUd-B_xD8DhthLYXRJLUHcMdpeG4y9wow0Gg.fy9wnnOglMJsejmpBy2BEA
....
For test decrypt data generate by node-app, on file app-java/src/test/java/org/example/AppTest.java is defined the variable dataEncrypted with value generated by app-java.
- Execute next command for get decrypt text
Hello************************************************
Unix
$ cd node-app
$ ./gradlew test
Windows
$ cd node-app
$ gradlew.bat test
And response example is:
2020-02-20T14:21:11,837 [ INFO] [ Test worker] [o.e.App ] [] dataDecrypted: Hello************************************************