前端js加密概述前端
对系统安全性要求比较高,那么须要选择https协议来传输数据。固然不少状况下通常的web网站,若是安全要求不是很高的话,用http协议就能够了。在这种状况下,密码的明文传输显然是不合适的,由于若是请求在传输过程当中被截了,就能够直接拿明文密码登陆网站了。jquery
HTTPS(443)在HTTP(80)的基础上加入了,SSL(Secure Sockets Layer 安全套接层)协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通讯加密。传输前用公钥加密,服务器端用私钥解密。web
对于使用http协议的web前端的加密,只能防君子不能防小人。前端是彻底暴露的,包括你的加密算法。知道了加密算法,密码都是能够破解的,只是时间问题。而为了保证数据库中存储的密码更安全,则须要在后端用多种单向(非对称)加密手段混合进行加密存储。算法
前端加密后端又须要解密,因此须要对称加密算法,即前端使用 encrypted = encrypt(password+key),后端使用 password = decrypt(encrypted +key) ,前端只传输密码与key加密后的字符串encrypted ,这样即便请求被拦截了,也知道了加密算法,可是因为缺乏key因此很难破解出明文密码。因此这个key很关键。而这个key是由后端控制生成与销毁的,用完即失效,因此即便能够模拟用加密后的密码来发请求模拟登陆,可是key已经失效了,后端仍是验证不过的。数据库
注意,若是本地环境本就是不安全的,key被知道了,那就瞬间就能够用解密算法破解出密码了。这里只是假设传输的过程当中被截获的情形。因此前端加密是防不了小人的。若是真要防,能够将加密算法的js文件进行压缩加密,不断更新的手段来使js文件难以获取,让黑客难以获取加密算法。变态的google就是这么干的,本身实现一个js虚拟机,经过不断更新加密混淆js文件让加密算法难以获取。这样黑客不知道加密算法就没法破解了。后端
经常使用的对称加密算法有 DES、3DES(TripleDES)、AES、RC二、RC四、RC5和Blowfis。能够参考:经常使用加密算法的Java实现总结浏览器
前端加密解密安全
//这里是require的一个组件 Tripledes是Crpto.js库
define(['jquery','Tripledes'], function ($,Tripledes){
var groupCrypto = {};
var fn={
key:'huakangdashen'//Ĭ秘钥
}
CryptoJS.mode.ECB = (function () {
var ECB = CryptoJS.lib.BlockCipherMode.extend();
ECB.Encryptor = ECB.extend({
processBlock: function (words, offset) {
this._cipher.encryptBlock(words, offset);
}
});
ECB.Decryptor = ECB.extend({
processBlock: function (words, offset) {
this._cipher.decryptBlock(words, offset);
}
});
return ECB;
}());
/**加密方法**/
groupCrypto.encryptByDES=function(message, key) {
/**判断传参类型**/
if(message===""||message===null||message===undefined){
return "";
}
if(typeof(message)!="string"){
message=message.toString();
}
var keyHex = CryptoJS.enc.Utf8.parse(key||fn.key);
var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
/**解密方法**/
groupCrypto.decryptByDES=function(ciphertext, key) {
if(ciphertext===""||ciphertext===null||ciphertext===undefined){
return "";
}
if(typeof(ciphertext)!="string"){
ciphertext=ciphertext.toString();
}
var keyHex = CryptoJS.enc.Utf8.parse(key||fn.key);
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
return groupCrypto;
});
复制代码
这里是require的一个组件 Tripledes是Crpto.js库 这里用的是DES加密 本代码只是示例 秘钥位置须要本身根据项目实例进行规划放什么地方。也能够请求接口由后端生成 每次生成不一样的key。bash
以后入参的时候进行加密入参 后端返回的重要参数能够是加密后的 前端进行解密处理服务器