基于node简单实现RSA加解密的方法步骤

 更新时间:2019年03月21日 09:56:47   作者:前端驿站  
这篇文章主要介绍了基于node简单实现RSA加解密的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

因项目登录密码字段没有加密引起安全问题,琢磨了下如何基于RSA加密,进行前后端通信(Java项目)。空余时间,看了下在node下的实现。

一、准备

前端是利用jsencrypt.js去加密,后端利用node-rsa去生成公私钥并解密。

二、实现

我是使用koa2初始化的项目。首先,需要前端页面显示和处理加密数据,所以直接在views中新建了index.html,用html为了不在学习模板上花时间。

修改index中的路由,

router.get('/', async (ctx, next) => {
  await ctx.render('index.html');
});

在html中引入jsencrypt.js,界面内容仅为一个输入框和发送命令的按钮:

<body>
  <input type="text" id="content"/>
  <button id="start">gogogog</button>
</body>
<script src="/javascripts/jsencrypt.js"></script>
<script>
document.getElementById('start').onclick = function() {
  // 获取公钥
  fetch('/publicKey').then(function(res){
    return res.text();
  }).then(function(publicKey) {
    // 设置公钥并加密
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(publicKey);
    var encrypted = encrypt.encrypt(document.getElementById('content').value);
    // 发送私钥去解密
    fetch('/decryption', {
      method: 'POST',
      body: JSON.stringify({value:encrypted})
    }).then(function(data) {
      return data.text();
    }).then(function(value) {
      console.log(value);
    });
  });
};
</script>

点击按钮,将输入框中的值先加密,再发送给服务器解密并打印该值。

前端用到了,publicKey和decryption接口,来看下服务端的实现。

首先引入node-rsa包,并创建实例,再输出公私钥,其中,setOptions必须得加上,否者会有报错问题。

const NodeRSA = require('node-rsa');
const key = new NodeRSA({b: 1024});
// 查看 https://github.com/rzcoder/node-rsa/issues/91
key.setOptions({encryptionScheme: 'pkcs1'}); // 必须加上,加密方式问题。

publicKey(GET),用于获取公钥,只需要调用下内置的方法就行了,

router.get('/publicKey', async (ctx, next) => {
  var publicDer = key.exportKey('public');
  var privateDer = key.exportKey('private');
  console.log('公钥:', publicDer);
  console.log('私钥:', privateDer);
  ctx.body = publicDer;
});

公钥传出给前端加密用,后端使用私钥解密,

router.post('/decryption', async (ctx, next) => {
  var keyValue = JSON.parse(ctx.request.body).value;
  const decrypted = key.decrypt(keyValue, 'utf8');
  console.log('decrypted: ', decrypted);
  ctx.body = decrypted;
});

解密时调用decrypt进行解密,前端控制台就能输出对应的值了。

三、demo详细代码

说这么多,直接查看代码最直观啦,详细代码查看:demo

npm i & npm run start

访问3000端口就可以了。

四、实际项目

在使用npm安装方式(vue或react)的项目中,可以这么使用:

npm i jsencrypt
// 实际使用
import { JSEncrypt } from 'jsencrypt';

项目地址可以查看:https://github.com/2fps/blooog

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件

    Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件

    在Node.js中,要实现目录文件夹的循环递归复制也非常简单,使用fs模块即可,仅需几行,而且性能也不错,我们先来实现文件的复制,需要的朋友可以参考下
    2017-09-09
  • nodejs获取表单数据的三种方法实例

    nodejs获取表单数据的三种方法实例

    在开发中经常需要获取form表单的数据,这篇文章主要给大家介绍了关于nodejs获取表单数据的三种方法,方法分别是form表单传递、ajax请求传递以及表单序列化,需要的朋友可以参考下
    2021-06-06
  • Ubuntu安装Node.js的2种方式

    Ubuntu安装Node.js的2种方式

    这篇文章主要给大家介绍了关于Ubuntu安装Node.js的2种方式,在Ubuntu系统上安装Node.js和npm非常简单,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • Node.js编写CLI的实例详解

    Node.js编写CLI的实例详解

    Node.js的应用场景有前后端分离、海量web页面渲染服务、命令行工具和桌面端应用等等。本篇文章选取CLI(Command Line Tools)子领域,来谈谈Node.js编写CLI的实践,让CLI切实解决实际工程问题。
    2017-05-05
  • node工作线程worker_threads的基本使用

    node工作线程worker_threads的基本使用

    本文主要介绍了node工作线程worker_threads的基本使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • node.js中的fs.utimesSync方法使用说明

    node.js中的fs.utimesSync方法使用说明

    这篇文章主要介绍了node.js中的fs.utimesSync方法使用说明,本文介绍了fs.utimesSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • 详解NodeJs项目 CentOs linux服务器线上部署

    详解NodeJs项目 CentOs linux服务器线上部署

    这篇文章主要介绍了NodeJs项目 CentOs linux服务器线上部署,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • koa2 用户注册、登录校验与加盐加密的实现方法

    koa2 用户注册、登录校验与加盐加密的实现方法

    这篇文章主要介绍了koa2 用户注册、登录校验与加盐加密的实现方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • Node中解决接口跨域问题详解

    Node中解决接口跨域问题详解

    在 Node 中编写接口时,我们常常会遇到跨域问题,通过本篇文章,我们来聊聊如何解决 Node 中接口的跨域问题,文中代码示例介绍了非常详细,需要的朋友可以借鉴一下
    2023-04-04
  • 使用Nodejs 实现一个简单的 Redis客户端(推荐)

    使用Nodejs 实现一个简单的 Redis客户端(推荐)

    在nodejs中支持TCP连接的是net模块, 其中使用createConnection(config)或者直接new Socket(config)来初始化一个TCP连接,这篇文章主要介绍了用Nodejs 实现一个简单的 Redis客户端,需要的朋友可以参考下
    2022-11-11

最新评论