前端加密,后端解密 用户密码的加密解密操作

用户密码的加密解密操作
背景:
公司做的是一个某某平台的系统 , 包括前台和后台 , 作者刚毕业 , 刚开始试用 , 带我的师傅让我实现密码的加密解密 , 说实话 , 都有封装好的api , 直接调用什么的 , 真的没啥难度 , 后来被其他小事情耽搁了 , 回过头来 , 前辈已经做好了 , 就叫我好好看看 , 理解下 , 嗯嗯……其实我也能做好的 。
1、流程
先说说加密的需要 , http协议默认情况下是以明文进行传输的 , 即没有对网上传输的数据进行加密的 , 别人如果通过抓包工具抓取传输数据 , 是可以直接进行阅读的 , 这样关键信息 , 例如密码这种东西在传输时显得很危险 , 所以对密码进行加密很有必要 。
没加密的请求数据
【前端加密,后端解密用户密码的加密解密操作】加密后的请求数据
由图可见 , 加密还是很必要的 。
见过两种加密方案 , 一种是可逆的加密算法 , 另一种是不可逆的加密算法 , 像常见的DES是可逆的 , 即可以通过密钥进行加密和解密 , MD5是不可逆的 , 只能通过再次加密才能判断明文是否相同 。
因此 , 在对加密密码这件事情上 , 有两种流程
2、实现
公司这边使用的是可逆的加密算法 , 也就是第二个方案 , 这种方案的好处 , 嘿嘿 , 大家都喜欢在不同的平台使用相同的密码 , 大家都懂的 。
前端实现
公司在vue框架中使用的是-js , 但无论是什么框架 , 应该都差不多吧 , 面向百度编程 , 你需要的百度上基本都有 。
vue中比较简单 , 直接使用 npm-js 进行安装
然后在使用的时候通过from ‘-js’ 引入就可以
然后就可以写其的工具包了 , 例如公司里实现的js工具包 , 写工具包只是为了重用 , 还是建议经常写工具方法 , 这样直接把文件一复制就能直接调用 。
创建一个js文件 , 键入:
import CryptoJS from 'crypto-js';export default {//随机生成指定数量的16进制keygeneratekey(num) {let library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let key = "";for (var i = 0; i < num; i++) {let randomPoz = Math.floor(Math.random() * library.length);key += library.substring(randomPoz, randomPoz + 1);}return key;},//加密encrypt(word, keyStr) {keyStr = keyStr ? keyStr : 'XXXXXXXXXXXXX'; //判断是否存在ksy , 不存在就用定义好的keyvar key = CryptoJS.enc.Utf8.parse(keyStr);var srcs = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });return encrypted.toString();},//解密decrypt(word, keyStr) {keyStr = keyStr ? keyStr : 'XXXXXXXXXXXXX';var key = CryptoJS.enc.Utf8.parse(keyStr);var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });return CryptoJS.enc.Utf8.stringify(decrypt).toString();}}
在vue中 , 引用js工具包 , 如下:
import AES from '@/utils/crypto'
直接在方法中调用其方法:
var keys = 'XXXXXXXXXXXXX'//如果是对象/数组的话 , 需要先JSON.stringify转换成字符串let password = AES.encrypt(this.form.password, keys)