内容简介:对系统安全性要求比较高,那么需要选择https协议来传输数据。当然很多情况下一般的web网站,如果安全要求不是很高的话,用http协议就可以了。在这种情况下,密码的明文传输显然是不合适的,因为如果请求在传输过程中被截了,就可以直接拿明文密码登录网站了。HTTPS(443)在HTTP(80)的基础上加入了,对于使用http协议的web前端的加密,
前端js加密概述
对系统安全性要求比较高,那么需要选择https协议来传输数据。当然很多情况下一般的web网站,如果安全要求不是很高的话,用http协议就可以了。在这种情况下,密码的明文传输显然是不合适的,因为如果请求在传输过程中被截了,就可以直接拿明文密码登录网站了。
HTTPS(443)在HTTP(80)的基础上加入了, SSL(Secure Sockets Layer 安全套接层)协议 ,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。传输前用公钥加密,服务器端用私钥解密。
对于使用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、RC2、RC4、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。
之后入参的时候进行加密入参 后端返回的重要参数可以是加密后的 前端进行解密处理
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
鸟哥的Linux私房菜 基础学习篇(第二版)
鸟哥 / 人民邮电出版社 / 2007-9 / 65.00元
《鸟哥的Linux私房菜基础学习篇(第二版)》全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linux的文件系统、文件、目录与磁盘的管理;第三部分介绍文字模式接口shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系统安全非常重要的Linux账号的管理......一起来看看 《鸟哥的Linux私房菜 基础学习篇(第二版)》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
Markdown 在线编辑器
Markdown 在线编辑器