受制于WEB页面源码的暴露,因此传统的对称加密方案以及加密密钥都将暴露在JS文件中,同样可以被解密。

目前比较好的解决方案是WEB页面全程或用户登录等关键环节使用HTTPS进行传输。

另外一种解决方案就是通过RSA进行加密。

RSA是一种非对称加密,也就是客户端通过公钥进行加密,服务端通过私钥进行解密RSA算法请点击百度百科进行了解。

也就是说公钥并不能进行解密,因此进行明文传输也是安全的。

1、加密流程

服务端生成一组公钥与私钥,将公钥发送给客户端进行密码加密,在使用密钥进行解密。

2、密钥生成(NodeJs)

主要使用  Node-Rsa 来生成RSA公钥、私钥:

 import NodeRSA from 'node-rsa';

 let key=new NodeRSA({b:512});
let publicDer=key.exportKey('pkcs8-public');
let privateDer=key.exportKey('pkcs8-private');

一般在服务器启动的时候可以生成一组密钥,并缓存起来,方便后续解密使用!

3、密码加密(浏览器端)

客户端接收到公钥以后,再提交表单之前对密码进行加密传输:

 import NodeRSA from 'node-rsa';

 var encryptStr=function(password) {
let clientKey = new NodeRSA({b: 512});
var publicKey=localStorage.publicKey; //从服务端接收到的公钥,缓存到本地
clientKey.importKey(publicKey);
let encrypted = clientKey.encrypt(password, 'base64');
return encrypted;
}

需要注意的问题是:

客户端引入Node-Rsa库会相对增加JS文件体积,请注意上线之前对代码进行压缩或者更换其他体积较小的RSA类库。

4、密码解密(NodeJS)

服务端收到客户端请求后,通过生成的私钥对加密后的密码进行解密:

 import NodeRSA from 'node-rsa';

 let decryptStr=function(){
let key=new NodeRSA({b:512});
let privateDer=await util.getCache("rsa.privateCache"); //从缓存读取私钥
if(util.isEmpty(privateDer)){
console.log("获取RSA私钥失败!!");
return null;
}
key.importKey(privateDer);
if(!key.isPrivate()){ //验证私钥是否正确
console.log("导入RSA私钥失败!!");
return null;
}
return key.decrypt(pwd, 'utf8'); //解密
}

基于RSA的WEB前端密码加密方案的更多相关文章

  1. 关于Web前端密码加密是否有意义的总结

    关于Web前端密码加密是否有意义的总结    :    https://blog.csdn.net/hla199106/article/details/45114801 个人:加密涉及到的是前后端的数 ...

  2. web登录密码加密

    文章:如何实现登录页面密码加密 文章:用RSA加密实现Web登录密码加密传输 文章:web登录用户名密码加密 知乎文章:Web前端密码加密是否有意义? 文章:记录一次黑客模拟攻击 成功拿到淘宝账号和密 ...

  3. NET Core2基于RabbitMQ对Web前端实现推送功能

    NET Core2基于RabbitMQ对Web前端实现推送功能 https://www.cnblogs.com/Andre/p/10012329.html 在我们很多的Web应用中会遇到需要从后端将指 ...

  4. 用RSA加密实现Web登录密码加密传输

    通常我们做一个Web应用程序的时候都需要登录,登录就要输入用户名和登录密码,并且,用户名和登录密码都是明文传输的,这样就有可能在中途被别人拦截,尤其是在网吧等场合. 这里顺带一个小插曲,我以前有家公司 ...

  5. 【转】对抗拖库 ―― Web 前端慢加密

    0×00 前言 天下武功,唯快不破.但密码加密不同.算法越快,越容易破. 0×01 暴力破解 密码破解,就是把加密后的密码还原成明文密码.似乎有不少方法,但最终都得走一条路:暴力穷举.也许你会说还可以 ...

  6. 10款基于jquery的web前端特效及源码下载

    1.jQuery时间轴插件:jQuery Timelinr 这是一款可用于展示历史和计划的时间轴插件,尤其比较适合一些网站展示发展历程.大事件等场景.该插件基于jQuery,可以滑动切换.水平和垂直滚 ...

  7. SSM项目的数据库密码加密方案

    项目主要采用:SpringMVC4.3.2.RELEASE +Spring4.3.2.RELEASE + Maven 3.3.3 + druid 1.0.29 + Mybatis 3.2.8 + My ...

  8. ASP.NET Core2基于RabbitMQ对Web前端实现推送功能

    在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯.因定时刷新的方法弊端很多(已不再采用 ...

  9. 将jdbc连接明文密码加密方案

    最近没有及时写文章,把最近处理的几个问题集中了一下写出来.这篇文章是关于如何处理spring项目中引入数据库连接等 使用的用户名和密码的明文进行加密.防止被他人窃取利用. 我们选择的加密方式为DES加 ...

随机推荐

  1. 每天一道Rust-LeetCode(2019-06-01)

    每天一道Rust-LeetCode(2019-06-01) 坚持每天一道题,刷题学习Rust. 题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的, ...

  2. ubuntu1604系统初始化

    1.初始化网络配置 1.1.创建工作目录 生产环境下必须有个固定的目录存放一些安装软件和调试工具, 否则每个管理员都随意存放软件工具,服务器的环境可以想而知 mkdir -p /opt/{tools, ...

  3. Python面向对象 | 类属性

    property property是一个装饰器函数,可以将一个方法伪装成属性,调用的时候可以不用加().@property被装饰的方法,是不能传参数的,因为它伪装成属性了. 装饰器的使用:在要装饰的函 ...

  4. 回溯法 | 图的m着色问题

    学习链接:算法 图的M着色问题 虽然今早9点才醒来,10点才来教室,但是coding得很高效.吃个早餐,拉个粑粑的时间,就把算法书上的[图的m着色]问题看明白了,大脑里也形成了解决问题的框架. 其实这 ...

  5. R包的安装 卸载 加载 移除等

    R包的安装 1)使用 Rstudio 手动安装 Rstudio的窗口默认为四个,在右下角的窗口的 packages 下会显示所有安装的 R 包 点击 Install -> 输入R 包名 -> ...

  6. vue添加背景音乐

    vue添加背景音乐需要用到HTML中的标签 参考手册:http://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp *在iOS端autopl ...

  7. 如何保证redis数据都是热点数据

    mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据? 1.限定 Redis 占用的内存,Redis 会根据自身数据淘汰策略,加载热数据到内存.所以,计算 ...

  8. dockerfile 的问题 FROM alpine:3.8 temporary error (try again later)

    FROM alpine:3.8 apk add xxx安装软件 fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX ...

  9. Django 分析(一)Requst、Middleware 和 Response 数据流

    0. 前言 通过 Django 编写 HTTP 接口时,我们需要指定 URL.Model 和 Views 函数(或者指定 RESTBaseView 对象解析参数和编写逻辑) 编写逻辑时的基本思路就是解 ...

  10. odoo13 searchpanel tree

    <record id="view_department_filter" model="ir.ui.view"> <field name=&qu ...