受制于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. pointnet++论文的翻译

    参考: https://blog.csdn.net/weixin_40664094/article/details/83902950 https://blog.csdn.net/pikachu_777 ...

  2. 【pytorch】持续踩坑 & 错误解决经历

    报错 1.[invalid argument 0: Sizes of tensors must match except in dimension 0.] {出现在 torch.utils.data. ...

  3. MySQL数据库索引类型、MySQL索引的优化及MySQL索引案例

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  4. 余弦相似度-Cosine Similar(转载)

    余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小.相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上. 与欧几里德距离类似,基于余弦相似度的计算方法也是把用 ...

  5. SDN实验2

    第二次sdn实验: 1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况. 本次使用py ...

  6. concurrent (二)AQS

    参考文档: https://www.cnblogs.com/waterystone/p/4920797.html

  7. 2018-2019-20175205实验四《Android程序设计》实验报告

    目录 2018-2019-20175205实验四<Android程序设计>实验报告 实验要求 教材学习 第二十五章 活动 第二十六章 UI组件 第二十七章 布局 实验步骤 任务一 任务二 ...

  8. Azure DevOps Server (TFS) 修改工作项附件大小限制

    1. 问题描述 当上传工作项附件时,系统提示"附件大小限制" 2.解决方案 2.1 默认设置 默认情况下,Azure DevOps Service和Team Foundation ...

  9. 【原创】在windows下使用xampp搭建phpcms v9

    我的操作环境: 操作系统:windows 7       64 位操作系统(有点古老,哈哈) 1.下载php环境和phpcmsv9源代码:phpcms v9 的源码:phpcms_v9.5.10_UT ...

  10. 快排的java实现方式,用java代码来实现快排

    1. 快排的思想 通过一趟排序将要排序的数据分割成独立的两部分,前一部分的所有数据都要小于后一部分的所有数据,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据的 ...