加密从来都不仅仅是一方要做的是,前端做了数据的加密,后端也仍然要做数据的加密;
那么到底有没有必要做前端数据的加密?前端做数据的加密有时候显得多此一举,但有时又显得极为重要:在此举个例子吧,就好比说当今市面上的锁都可以在20分钟内被解开,
那么你感觉有没有必要给自己的房子上锁?个人感觉还是十分有必要的。
web的网络安全信息十分宏大,在此先来讲讲前端js常用的几种数据加密算法吧!
1.使用base64对数据进行加密(btoa加密,atob解密)
需要注意的:base64的转码只是针对字符串,若出现了中文符号或者中文等,会报错.
会使用到window,故需在浏览器环境下运行。。
如:
1 //window是BOM的核心对象,而web中使用JavaScript,而BOM是核心,故需要在浏览器环境下才可使用 2 let str = 'hello,'; 3 let sec_str = window.btoa(str); 4 console.log('加密后:' + sec_str); //加密后:aGVsbG8s 5 let en_str = window.atob(sec_str); 6 console.log('解密后:' + en_str); //解密后:hello,
如果想用采用支持中文式的加密可采用window.encodeURIComponent()和window.decodeURIComponent().
如:
1 //支持中文的另类式加密 2 let name = '良夜getIt,62'; 3 let sec_name = window.encodeURIComponent(name); 4 console.log('加密后:' + sec_name); //加密后:%E8%89%AF%E5%A4%9CgetIt%EF%BC%8C62 5 let en_name = window.decodeURIComponent(sec_name); 6 console.log('解密后' + en_name); //解密后良夜getIt,62
显然可见,此种算法属于可逆转式加密,对于可逆转式加密一般建议自己定义转码译码规则,且可逆转的加密可以进行对此加密,在此就不细说了,
有兴趣的可以私下来研究研究。
2.sha1加密(不可逆转)
加密思想:接收一段明文,然后以不可逆转的方式加密成密文;
与md5进行比较:
密码分析的安全性:由于md5设计,易受密码分析的攻击;而sha1对密码分析攻击具有着更强的耐受力;
速度:在同等硬件下,sha1的运行速度慢于md5;
使用:同样需要引入sha1.js,此处是在bootcdn上引入在线文件来使用的,bootcdn(用过的都说好!!!)
代码:
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 <script src="https://cdn.bootcdn.net/ajax/libs/js-sha1/0.6.0/sha1.js"></script> 9 </head> 10 11 <body> 12 13 </body> 14 <script> 15 var sha1_1 = sha1("hello良夜123"); 16 console.log(sha1_1); //9d4237013af6d0a3aa1809465117189fb40b4560 17 var sha1_2 = sha1("admin:10086"); 18 console.log(sha1_2); //a3f2da43101c634a42771f86e25c4abc415be0bc 19 </script> 20 21 </html>
3.MD5不可逆转加密
这里同样引入bootcdn的md5.js文件,有兴趣的同学可以下载
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>md5</title> 8 <script src="https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.17.0/js/md5.js"></script> 9 </head> 10 11 <body> 12 13 </body> 14 <script> 15 let pswd = 'wu913628'; 16 console.log(md5(pswd)); // 126591c250ccda6ff045006461d773f2 17 </script> 18 19 </html>
4.使用js函数escape()和unescape()来编码和解码字符串
1 let pswd = 'wu913428良夜'; 2 let sec_pswd = escape(pswd); 3 console.log('加密后' + sec_pswd); //加密后wu913428%u826F%u591C 4 console.log('解密后' + unescape(sec_pswd)); //解密后wu913428良夜