广告
返回顶部
首页 > 资讯 > 前端开发 > html >Node怎么实现前后端数据传输加密解密
  • 194
分享到

Node怎么实现前后端数据传输加密解密

2024-04-02 19:04:59 194人浏览 独家记忆
摘要

今天小编给大家分享一下node怎么实现前后端数据传输加密解密的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一

今天小编给大家分享一下node怎么实现前后端数据传输加密解密的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

在前后端通信过程中,一些敏感信息,特别是用户的账号密码,需要加密进行传输,如何选择加密方式也是一门学问,这里倒也不过多偏题了。 通常来说B/S架构中用的比较多的传输数据加密是RSA加密,核心思想就是公钥加密,私钥解密。 公钥,可以理解为可以公开的钥匙,服务器将公钥发给客户端,客户端用公钥对数据进行加密传输,服务器收到客户端传来的密文,再用自己的配对的私钥进行解密,即可获得原始的数据。

大致流程如下图所示:

Node怎么实现前后端数据传输加密解密

示例

1、生成公私钥对

nodejs中有一个核心模块——crypto提供各种加密、解密相关api。以下示例是基于Node@12.15.0版本进行编写。

const crypto = require('crypto');


function genRSAKeyPaire() {
  const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
    modulusLength: 4096,
    publicKeyEncoding: {
      type: 'pkcs1',
      fORMat: 'pem',
    },
    privateKeyEncoding: {
      type: 'pkcs1',
      format: 'pem',
    },
  });
  return { publicKey, privateKey };
}

// 打印生成的公私钥对
console.log(genRSAKeyPaire());

输出示例如下:

(示例公私钥已被删除了一部分,请勿用于实验)

{
  publicKey: '-----BEGIN RSA PUBLIC KEY-----\n' +
    'MIICCgKCAgEAsitohTu9Jf2h+NPV4tNfFhPrlbStzXNM8wSEcskwtpwi6aZfgQC7\n' +
    '/A7M1hN8Zk8WgiZjy05AHinWPvXo70OWj8TminIAjB2wh0nDqm+IQqN7r20uzeJm\n' +
    'GBf1KusGemChEiFwiad1h/OB9z9LC8zMYR/G+XAbFfcv8MxAMI9mgmS8t5+xeYm6\n' +
    'EMiCQkQjfqpErhW3oESj8hrdJdOZbiK3l0TgYLyjZRQu6pHzFkmd9We3BY1qcXo1\n' +
    '2BtNKvqoH9QDJItsb3S9v2mOGl1rbItKlDrqYCdGY4iyXVIfagNWHraVzHqH/ter\n' +
    'X+hOmLOwu+Npkz+oEDmnUq1UGY181PBGiNwHVodXx+DF5ckj/bGIxFG2nSiNe3DO\n' +
    'WLxV3+W8Af0006Oe+fRo1D7xt5SK5AipCpylKKYdyuP3MJ5dpPu7GMIcwj20Ndnu\n' +
    'cDJJ2HH9kZAKz6/r62S7ALluFSecuZr0Dqc6Srjs43zBTpS/hSI33r01ste6Zel8\n' +
    'uRZKW/4FhUg8gW1KCM+Mp1MaZufOurCDc1Iec0SI71Tteg52BTpfb8cQ9Z1h0xWR\n' +
    'FdbmLMLuJkIi5oG2+FLAqlGknik0AxXpnlivSOW5Q+eLOh0DjQxxU2sCAwEAAQ==\n' +
    '-----END RSA PUBLIC KEY-----\n',
  privateKey: '-----BEGIN RSA PRIVATE KEY-----\n' +
    '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\n' +
    '-----END RSA PRIVATE KEY-----\n'
}

2、公钥加密

在有了公私钥对的基础上,使用公钥进行加密,示例代码如下:

const crypto = require('crypto');


function genRSAKeyPaire() {
  const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
    modulusLength: 4096,
    publicKeyEncoding: {
      type: 'pkcs1',
      format: 'pem',
    },
    privateKeyEncoding: {
      type: 'pkcs1',
      format: 'pem',
    },
  });

  return { publicKey, privateKey };
}

const { publicKey } = genRSAKeyPaire();


function publicKeyEncrypt(data, publicKey) {
  return crypto.publicEncrypt(publicKey, Buffer.from(data)).toString('base64')
}

const entry = {
  name: 'zhangsan',
  passWord: '123456'
};

// 将数据转为字符串格式,并进行公钥加密后打印
console.log(publicKeyEncrypt(JSON.stringify(entry), publicKey));

输出内容为如下格式:

(数据已做删改)

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

3、私钥解密

有了公钥加密后的密文,再用私钥进行解密,代码如下:

const crypto = require('crypto');


function genRSAKeyPaire() {
  const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
    modulusLength: 4096,
    publicKeyEncoding: {
      type: 'pkcs1',
      format: 'pem',
    },
    privateKeyEncoding: {
      type: 'pkcs1',
      format: 'pem',
    },
  });

  return { publicKey, privateKey };
}

const { publicKey, privateKey } = genRSAKeyPaire();


function publicKeyEncrypt(data, publicKey) {
  return crypto.publicEncrypt(publicKey, Buffer.from(data)).toString('base64')
}

const entry = {
  name: 'zhangsan',
  password: '123456'
};

const encryptedData = publicKeyEncrypt(JSON.stringify(entry), publicKey);


function privateKeyDecrypt(encryptedData, privateKey) {
  return crypto.privateDecrypt(privateKey, Buffer.from(encryptedData, 'base64')).toString();
}

const originData = privateKeyDecrypt(encryptedData, privateKey);

// 打印用私钥解密后的数据
console.log(originData);

输出结果:

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

和我们上面定义的entry数据内容一致,说明解密成功,但是解密后是一个字符串,如果原始数据是一个对象的话,别忘记了将其反序列化为对象。

以上就是“Node怎么实现前后端数据传输加密解密”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网html频道。

--结束END--

本文标题: Node怎么实现前后端数据传输加密解密

本文链接: https://www.lsjlt.com/news/98632.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node怎么实现前后端数据传输加密解密
    今天小编给大家分享一下Node怎么实现前后端数据传输加密解密的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2022-10-19
  • 前后端传输数据加密怎么做
    使用base64加密实现前后端数据加密传输的方法具体方法如下:var keyStr = "ABCDEFGHIJKLMNOP"+"QRSTUVWXYZabcdef"+"ghijklmnopqrstuv"+"wxyz0123456789+/="...
    99+
    2022-10-17
  • vue前端RSA加密java后端解密如何实现
    这篇文章主要介绍“vue前端RSA加密java后端解密如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue前端RSA加密java后端解密如何实现”文章能帮助大家解决问题。一、前言最近安全测试...
    99+
    2023-07-05
  • 前端cookie中的数据怎么加密解密
    在前端中使用base64加密算法对cookie中的数据进行加密解密操作,具体方法如下:<!DOCTYPE HTML><html><head><meta charset="...
    99+
    2022-10-15
  • vue前端RSA加密java后端解密的方法实现
    目录一、前言二、前端代码与用法三、后端代码与用法一、前言 最近安全测试的总是测出安全漏洞来,让开发改。 想了想干脆把请求参数都加密下,前端加密后端解密,这样总差不多了。 看了下AES...
    99+
    2023-02-24
    vue RSA加密 java后端解密
  • Java实现前端jsencrypt.js加密后端解密的示例代码
    目录1.什么是RSA2.RSA算法2.1 生成公钥和私钥2.2 使用公钥加密信息2.3 使用私钥解密信息4.RSA的应用:数字签名5.RSA的安全性6.为什么要写这文章7.前端代码8...
    99+
    2022-11-13
  • vue数据传输怎么加密
    今天小编给大家分享一下vue数据传输怎么加密的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.首先,在vue项目中使用yar...
    99+
    2023-07-04
  • FTP传输数据怎么加密
    利用vsftp对FTP传输数据进行加密的方法首先,在计算机中创建一个FTP用户;user -d /ftp_www -s /sbin/nologin mvpbangecho "123123" | passwd mvpbang --stdinc...
    99+
    2022-10-17
  • 前端怎么做数据加密
    在前端中使用aes加密算法对数据进行加密的方法前端代码如下:function aesEncrypt(text, key) {const textBytes = aesjs.utils.utf8.toBytes(text); // 把字符串转...
    99+
    2022-10-23
  • js插件jsencrypt实现rsa前端加密php后台解密
    前端页面代码 传递到php后台的是公钥加密的数据 Document //公钥 PKCS8(JAVA适用) var PUBLIC_KEY = 'MIGfMA0GCSqG...
    99+
    2023-09-26
    前端 javascript 开发语言 php jquery
  • .NET API接口数据传输加密怎么实现
    这篇文章主要介绍了.NET API接口数据传输加密怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇.NET API接口数据传输加密怎么实现文章都会有所收获,下面我们一起来看看吧。硬编码...
    99+
    2023-07-04
  • PHP加密解密函数实现数据传输的安全保护功能
    PHP加密解密函数实现数据传输的安全保护功能随着互联网的快速发展和应用的普及,数据的安全性问题变得尤为重要。很多网站和应用程序需要在客户端和服务器之间传输敏感数据,如用户密码、银行账户信息等,为了保护这些数据的安全,一种可行的方法是使用加密...
    99+
    2023-11-20
    数据传输 安全保护 PHP加密解密函数
  • h5如何实现数据安全加密传输
    h5利用api接口实现数据加密传输,具体方法如下:function CurlPost($url, $param = null, $timeout = 10){//初始化curl$curl = curl_init();curl_setopt(...
    99+
    2022-10-12
  • Android客户端与服务端数据加密传输方案详解
    目录前言数据加密方案数据加密细节AES加解密RSA公钥加密总结前言 在网络通信中,通信传输数据容易被截取或篡改,如果在传输用户隐私数据过程中,被不法分子截取或篡改,就可能导致用户受...
    99+
    2023-01-03
    Android客户端服务端数据加密传输 Android 数据加密传输
  • Spring MVC前后端的数据传输的实现方法
    这篇文章将为大家详细讲解有关Spring MVC前后端的数据传输的实现方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。后端——> 前端在Spring MVC中这主要通过Model将数据从后端传送到...
    99+
    2023-05-30
    spring mvc
  • 前端怎么对接口数据进行加密
    在前端中使用AES对接口数据进行加密的方法前端代码如下:var aesUtil = {//获取key,genKey : function (length = 16) {let random = "ABCDEFGHIJKLMNOPQRSTUV...
    99+
    2022-10-13
  • 怎么实现security.js RSA加密与java客户端解密
    本篇文章给大家分享的是有关怎么实现security.js RSA加密与java客户端解密,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  在通常的http协议的网站中直接提交数...
    99+
    2023-06-02
  • 怎么用对称加密算法实现C#数据加密
    这篇文章主要讲解了“怎么用对称加密算法实现C#数据加密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用对称加密算法实现C#数据加密”吧!以下是关于对称加密算法的C#数据加密实现代码,大家...
    99+
    2023-06-18
  • springboot项目数据库密码怎么实现加密
    这篇文章主要介绍了springboot项目数据库密码怎么实现加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot项目数据库密码怎么实现加密文章都会有所收获,下面我们一起来看看吧。方案一、使用d...
    99+
    2023-06-08
  • 怎么实现 Spring Boot 接口参数加密解密
    本篇内容主要讲解“怎么实现 Spring Boot 接口参数加密解密”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现 Spring Boot 接口参数加密解密”吧!加密解密本身并不是难事,...
    99+
    2023-06-17
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作