Node如何实现前后端数据传输加密与解密(node如何实现前后端数据传输加密与解密功能)

admin310356年前2条评论

Node怎样实现数据传输加密解密?下面本篇文章给人人介绍一下Node.js实现先后端数据传输加密解密的方法,希望对于人人有所帮助!

聊聊Node怎样实现先后端数据传输加密解密 Node如何实现前后端数据传输加密与解密(node如何实现前后端数据传输加密与解密功能) 技术教程

在先后端通信进程中,一些敏感信息,尤其是用户的账号明码,需要加密停止传输,怎样抉择加密形式也是一门知识,这里倒也无非多偏偏题了。一般来说B/S架构中用的对于比多的传输数据加密是RSA加密,外围思维便是公钥加密,私钥解密。公钥,能够明白为能够公开的钥匙,效劳器将公钥发给客户端,客户端用公钥对于数据停止加密传输,效劳器收到客户端传来的密文,再用自身的配对于的私钥停止解密,就可获取原始的数据。

年夜致流程下列图所示:

聊聊Node怎样实现先后端数据传输加密解密 Node如何实现前后端数据传输加密与解密(node如何实现前后端数据传输加密与解密功能) 技术教程

示例

一、天生公私钥对于

Nodejs中有一个外围模块——crypto供应各种加密、解密相干API。下列示例是基于Node@12.15.0版本停止编写。

  1. const crypto = require('crypto');
  2.  
  3. /**
  4.  * 天生RSA公私钥对于
  5.  * @return {*} publicKey: 公钥;privateKey: 私钥
  6.  */
  7. function genRSAKeyPaire() {
  8.   const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  9.     modulusLength: 4096,
  10.     publicKeyEncoding: {
  11.       type: 'pkcs1',
  12.       format: 'pem',
  13.     },
  14.     privateKeyEncoding: {
  15.       type: 'pkcs1',
  16.       format: 'pem',
  17.     },
  18.   });
  19.   return { publicKey, privateKey };
  20. }
  21.  
  22. // 打印天生的公私钥对于
  23. console.log(genRSAKeyPaire());

输入示比方下:(示例公私钥已经被删除了一整体,请勿用于试验)

  1. {
  2.   publicKey: '-----BEGIN RSA PUBLIC KEY-----\n' +
  3.     'MIICCgKCAgEAsitohTu9Jf2h+NPV4tNfFhPrlbStzXNM8wSEcskwtpwi6aZfgQC7\n' +
  4.     '/A7M1hN8Zk8WgiZjy05AHinWPvXo70OWj8TminIAjB2wh0nDqm+IQqN7r20uzeJm\n' +
  5.     'GBf1KusGemChEiFwiad1h/OB9z9LC8zMYR/G+XAbFfcv8MxAMI9mgmS8t5+xeYm6\n' +
  6.     'EMiCQkQjfqpErhW3oESj8hrdJdOZbiK3l0TgYLyjZRQu6pHzFkmd9We3BY1qcXo1\n' +
  7.     '2BtNKvqoH9QDJItsb3S9v2mOGl1rbItKlDrqYCdGY4iyXVIfagNWHraVzHqH/ter\n' +
  8.     'X+hOmLOwu+Npkz+oEDmnUq1UGY181PBGiNwHVodXx+DF5ckj/bGIxFG2nSiNe3dO\n' +
  9.     'WLxV3+W8Af0006Oe+fRo1D7xt5SK5AipCpylKKYdyuP3MJ5dpPu7GMIcwj20Ndnu\n' +
  10.     'cDJJ2HH9kZAKz6/r62S7ALluFSecuZr0Dqc6SrJs43zBTpS/hSI33r01ste6Zel8\n' +
  11.     'uRZKW/4FhUg8gW1KCM+Mp1MaZufOurCDc1Iec0SI71Tteg52BTpfb8cQ9Z1h0xWR\n' +
  12.     'FdbmLMLuJkIi5oG2+FLAqlGknik0AxXpnlivSOW5Q+eLOh0DjQxxU2sCAwEAAQ==\n' +
  13.     '-----END RSA PUBLIC KEY-----\n',
  14.   privateKey: '-----BEGIN RSA PRIVATE KEY-----\n' +
  15.     'MIIJKQIBAAKCAgEAsitohTu9Jf2h+NPV4tNfFhPrlbStzXNM8wSEcskwtpwi6aZf\n' +
  16.     'gQC7/A7M1hN8Zk8WgiZjy05AHinWPvXo70OWj8TminIAjB2wh0nDqm+IQqN7r20u\n' +
  17.     'zeJmGBf1KusGemChEiFwiad1h/OB9z9LC8zMYR/G+XAbFfcv8MxAMI9mgmS8t5+x\n' +
  18.     'eYm6EMiCQkQjfqpErhW3oESj8hrdJdOZbiK3l0TgYLyjZRQu6pHzFkmd9We3BY1q\n' +
  19.     'cXo12BtNKvqoH9QDJItsb3S9v2mOGl1rbItKlDrqYCdGY4iyXVIfagNWHraVzHqH\n' +
  20.     '/terX+hOmLOwu+Npkz+oEDmnUq1UGY181PBGiNwHVodXx+DF5ckj/bGIxFG2nSiN\n' +
  21.     'e3dOWLxV3+W8Af0006Oe+fRo1D7xt5SK5AipCpylKKYdyuP3MJ5dpPu7GMIcwj20\n' +
  22.     'NdnucDJJ2HH9kZAKz6/r62S7ALluFSecuZr0Dqc6SrJs43zBTpS/hSI33r01ste6\n' +
  23.     'Zel8uRZKW/4FhUg8gW1KCM+Mp1MaZufOurCDc1Iec0SI71Tteg52BTpfb8cQ9Z1h\n' +
  24.     '0xWRd+u6S+oP8/hl5bdtSZhT1ZTK8Q/BF99+qOT0q4KGGu9aM8kOuMk2BI3qIN7k\n' +
  25.     '0zAQFdbmLMLuJkIi5oG2+FLAqlGknik0AxXpnlivSOW5Q+eLOh0DjQxxU2sCAwEA\n' +
  26.     'AQKCAgA9hxAJMqAXRodwznbGZggoL6jjggmjMXYZVi4HFcNkzHaiCXphqkdAvDuw\n' +
  27.     'kfobuqQjPe6oftVVlU0PYQyX09divrR+iu/1cytLDQYtDWcY3CwSYLoRD2YCXAOm\n' +
  28.     'VpNeH5CAGlwqrVHBKS5wm8LmyEqsH7Uu3q/73ekIVwCzxFG6Jd+l6df4CL/gm92f\n' +
  29.     '1LgNPe+JzqYjCpEzQmOsdG4/wm10J6z0uzAR7+5jwxMXV0TdQnvJxxRDK9j8UDFN\n' +
  30.     '7lGw7B5JuHwx4TbFq0YPhMNcMJ4Iom/d1LJSHRq7b2i5y30qDhOdEZN1RjVAYZEC\n' +
  31.     '2srll5sV5p27PK2zt3ebe2jogDFa7crOyKV7zkNZRNfrC1wVAcxq5+WaAinXtJRb\n' +
  32.     '/CbtW5uboXC/kwRU0l5BAXg6MNoeMZCg4wMp8cXnVYxrodon31QVcC1HsV5Rx3Dm\n' +
  33.     'R9+giZcWoxDm314oy3mxmbMKQ/it6Pf2kMGLbmEYXFFdTSr/ZWY5+ZaaO6GgM59o\n' +
  34.     'anh0FHt0xBEyE11Pivck6jMyl7eCp+yeOPhJxsaFLLH8SJnjWluAkrGwqzXeRB/i\n' +
  35.     'u5mGr+2zK4844kQDg7zUAdaFFYEixGwpu21XOEv+5ODSwecpVFSrwIp3LXFkfAir\n' +
  36.     'vBGUeSWdFI98Ehdi8eOC+11hif9AxtNMmNqnl/eK0D44WAkZAQKCAQEA6WBZ9agb\n' +
  37.     'VMhckT09WlGQfyiWHh9pnpEr+NPu2fRgkAh5AcrWG8PeD3QAIXFz1CMgKsGxa6Mz\n' +
  38.     'SkM04ZMYGYC5Zv3KPWxwcPCVskycozo0eDkFrT7pC7N2ZZNFcDRmTAiX1CkAx1RY\n' +
  39.     'iihws2Vl5gahGlUSwjgpssfjFL68iPGz1i2F7yossP+8tZO88SUPuDbahhX/QEkV\n' +
  40.     '1P5uL43Rf4aGjcBWv5x3BAPpYOsn//AUPEeT0jNe2IQ81c92SYa8M0fBdXkXmhfN\n' +
  41.     'FUXLvMUD3XSEMgFXvS1zIoP8F1sG8HZA0p5LNugYZuyIeUPOUCkoHKl/TzMQyl07\n' +
  42.     '7Yi7a2ONYrSOEQKCAQEAw3EAgvp1wdegHEnACDoA5ls1afuqx5ewt8nJCwXfHOWC\n' +
  43.     'B33MwEIOc6/Phf+EMQkjl/+r2mv3jk2I3WqGkaAQs8H68GnjSZ0VKebRSmXhpiqm\n' +
  44.     'Jsl99LVIKO8GJ2Igjccn5buZRWes4fxr4/TvM2lLNJhrmeQahpEMbCYLwRSO+BTZ\n' +
  45.     'p4CGja5GXtSUDKagnvXhGyFzI5OF5XYyHLjdMN5i4v/HVhlMLVmwReAqY/fZ1iFc\n' +
  46.     'jyRUbSMOBo6fE5HI8NO481c4m1e96Cj1BgwWE+mNcNXfPj3CDlrxJY848+PYpT8J\n' +
  47.     '8EPfc2+hPhufFfBgXWpZbPrHIG97UsqhWr3aq/u9uwKCAQEArPJJWGJe9sKQztU6\n' +
  48.     'PU+KrKEwNlyDEg51Lq4oKH8QfEy7GBfv+Z16V6tYWXBRLRlmwijOSX0lClipvK0c\n' +
  49.     'Q/H/85IKKODOpvOzi/F4dwIwVhOz4EJpw9EX4Yh1AgTi9l+73G8Sc6VPA/uaIWf4\n' +
  50.     'TrIE+5WmFCY4yJOW9g2vfDDaW9NamPWBLx4mA83bTD1x28tSv+FXSpWexzxR/Y20\n' +
  51.     'fjP8TNoHr3HNRT182uUJvIJ3DIDiy/hjxkKhLrXS7AQcPkhj1qGJWxleUvBpXpgG\n' +
  52.     'GDw7py8VjU08MIzs6YX8q4CG406JYMQ5KTUKogscvozxe+QkQ1YNkFntikc01Q1u\n' +
  53.     'foJdcQKCAQAfJUb7mIZjmcU+PNKJfRTfoPFmLmEM5bOX1mRfiVQA+uI552ZVzTEY\n' +
  54.     'ZpAfvpSGa/psIqZ0bHhLCTgicPN5CZUf0G35GibKeGoC/3Gi9ZF8NZe83qdf8/PH\n' +
  55.     '8i983zpo3bASAE9wrBD1ApD/Bu2Ht+PwQcoEAEHp5/ue0IFXB7uw9UGqW+UVdwxn\n' +
  56.     '2GCvk25NZsm01SPQK5ZO9wMNaLh3LTl9C13s7qMhJwXcXNjkjX79jNt/RD7gFZIK\n' +
  57.     'oXfgWn83QcZboS64Msdk1AIYMJzkF3ge3zZwaM8gEoYTgjuFQm4oB1/CFk7pyoRb\n' +
  58.     'rXMwv9nbiTMvFtfc52czzm7gUxkiB0A5AoIBAQCffC5rDhDGPiwJOft0PYNK/Ctk\n' +
  59.     '3QZa2+t1ni0HYQhPok5OSgAOZwkZItGDGXdrvXe4+q/ttLLu6KhVaVRVoe+VzMpl\n' +
  60.     'WKp0RMBt999JS2XAipbguTQXrfsev0RNam0AFREUZdPNvrwLprQAwTl0iC2t4H6b\n' +
  61.     'RybgQU6RpORFDvpwmkBjJ9Q2p540LmN0NVHq6Axv+g4TI2XdXlw8T7VQbJGKvfuJ\n' +
  62.     'g7j4+f7J+KpN5rHudiEPIVOK8V7Ap8dxP+lwEhZjK1MvCJE+SXWTkrRcY/TX\n' +
  63.     '-----END RSA PRIVATE KEY-----\n'
  64. }

二、公钥加密

在有了公私钥对于的基础上,应用公钥停止加密,示例代码下列:

  1. const crypto = require('crypto');
  2.  
  3. /**
  4.  * 天生公私钥对于
  5.  * @return {*} publicKey: 公钥;privateKey: 私钥
  6.  */
  7. function genRSAKeyPaire() {
  8.   const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  9.     modulusLength: 4096,
  10.     publicKeyEncoding: {
  11.       type: 'pkcs1',
  12.       format: 'pem',
  13.     },
  14.     privateKeyEncoding: {
  15.       type: 'pkcs1',
  16.       format: 'pem',
  17.     },
  18.   });
  19.  
  20.   return { publicKey, privateKey };
  21. }
  22.  
  23. const { publicKey } = genRSAKeyPaire();
  24.  
  25. /**
  26.    * 应用公钥停止加密
  27.    * @param {String} data 
  28.    * @param {String} publicKey 
  29.    * @return {String} 加密后的密文
  30.    */
  31. function publicKeyEncrypt(data, publicKey) {
  32.   return crypto.publicEncrypt(publicKey, Buffer.from(data)).toString('base64')
  33. }
  34.  
  35. const entry = {
  36.   name: 'zhangsan',
  37.   password: '123456'
  38. };
  39.  
  40. // 将数据转为字符串体例,并停止公钥加密后打印
  41. console.log(publicKeyEncrypt(JSON.stringify(entry), publicKey));

输入内容为下列体例:(数据已经做点窜)

  1. Ri0p8QFmnYe8Xo36DextK242o9pcdL0QFDo6gUxhzjwQD30UFlqJL57na445BebSp1VT1z94emJgrME7xTDzV1tshtmVNtarqCUCzZMF4uYAtZCQLJhCX3708g7lOFksiUvi6MlXCVVOIu2VyFsIS/6DeEWYNirPK6zEBw1e2V2jWoL+63+iGNyhtKFJI1ECGyMmXUWCMicUmgE/JiHJD7YXPKB9+WaB7Wglj5udBdd4fALUp7qIo8TWJZJkLUg5yMbe7kemNWk050Xi1KiEt3s8IAqoRB1qGghTmE/TW+M/jIblSSy3Urle1AYsOFUzh9wV/H+uD+UNdaCvlvfmdV8hTIjjLNy9r/GbuaI5N0TkaX/dk47iUuorZabPoINEnM8lYxcKPvgVJufMfSX5wLxgx60nt4cpz3T2IutO97sdocVbhsiSlpFLpIk88xd4=

三、私钥解密

有了公钥加密后的密文,再用私钥停止解密,代码下列:

  1. const crypto = require('crypto');
  2.  
  3. /**
  4.  * 天生公私钥对于
  5.  * @return {*} publicKey: 公钥;privateKey: 私钥
  6.  */
  7. function genRSAKeyPaire() {
  8.   const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  9.     modulusLength: 4096,
  10.     publicKeyEncoding: {
  11.       type: 'pkcs1',
  12.       format: 'pem',
  13.     },
  14.     privateKeyEncoding: {
  15.       type: 'pkcs1',
  16.       format: 'pem',
  17.     },
  18.   });
  19.  
  20.   return { publicKey, privateKey };
  21. }
  22.  
  23. const { publicKey, privateKey } = genRSAKeyPaire();
  24.  
  25. /**
  26.    * 应用公钥停止加密
  27.    * @param {String} data 
  28.    * @param {String} publicKey 
  29.    * @return {String} 加密后的密文
  30.    */
  31. function publicKeyEncrypt(data, publicKey) {
  32.   return crypto.publicEncrypt(publicKey, Buffer.from(data)).toString('base64')
  33. }
  34.  
  35. const entry = {
  36.   name: 'zhangsan',
  37.   password: '123456'
  38. };
  39.  
  40. const encryptedData = publicKeyEncrypt(JSON.stringify(entry), publicKey);
  41.  
  42. /**
  43.  * 应用私钥停止解密
  44.  * @param {String} encryptedData 
  45.  * @param {String} privateKey 
  46.  * @return {String} 解密后的明文
  47.  */
  48. function privateKeyDecrypt(encryptedData, privateKey) {
  49.   return crypto.privateDecrypt(privateKey, Buffer.from(encryptedData, 'base64')).toString();
  50. }
  51.  
  52. const originData = privateKeyDecrypt(encryptedData, privateKey);
  53.  
  54. // 打印用私钥解密后的数据
  55. console.log(originData);

输入效果:

  1. {"name":"zhangsan","password":"123456"}

以及咱们下面界说的entry数据内容对于抗,说明解密胜利,然而解密后是一个字符串,如果原始数据是一个工具的话,别遗记了将其反序列化为工具。

你可能想看:

本文链接:https://addon.ciliseo.com/node-ru-he-shi-xian-qian-hou-duan-shu-ju-chuan-shu-jia-mi-yu-jie-mi.html

Node.js数据加密数据传输如何实现后端Node公钥公私数据示例加密解密是一个客户端如何
数据恢复大师数据蛙安卓恢复专家数据传输到新手机数据恢复大师免费版数据漫游是什么意思数据分析师证书怎么考数据港数据港股票数据恢复数据分析需要学哪些数据图表数据蛙数据恢复专家数据表数据恢复软件免费版数据库数据透视表的使用方法数据蛙数据透视表数据分析数据结构数据集数据蒸馏数据可视化数据标注数据中心是一个魁梧的男子身形高大强壮是一个什么样的人是一个接续奋斗的历史过程是一项救国是一个错误年份是什么歌是一个重要的议题某种程度上媒体为了传播效果是一个脱离了低级趣味有益于人民的人是一个错误的年份粤语完整版十一个读书人打一个字是一个纯粹的人是一个脱离了低级趣味的人英文是一个国家一个民族发展中更基本更深沉是一个行了的李洋洋是一个常设机构,负责指挥全军的三军联合作战是一个国家、一个民族发展中最基本、最深沉、最持久的力量是一个系统工程是一个双向奔赴的是一个政党、一个国家的最大优势是一个国家的最大优势是一个团结务实高效的班子是一个国家对外贸易的窗口是一个民族独立自主的思想根基是一个错误年份是一个人十一个人是一个魁梧男子是一个企业是一个一个一个是一个误会没什么可悲是一个合并提交但未提供-m选项是一家人啊是我一个人放不下是不是一个人太久了

网友评论

  • 2025-03-1010:02:35

    如何有效沟通,是人际关系中不可或缺的技巧。

  • 2025-03-1011:28:30

    如何这首歌写出了人们面对生活的困惑和寻找答案的过程,歌词中透露出深深的情感与哲理,它让人反思如何在人生的道路上做出选择、学会成长并坚定前行的方法论指引作用是极其有价值的;在喧嚣的世界里为我们指明方向时非常治愈的旋律也很吸引人。这是一首具有启发性和共鸣的歌曲。

扫一扫二维码添加客服微信

关于我们建站招商建站服务