前端加密算法之AES-ECB
一、简介
AES加密算法是DES算法的替代者,也是现在最流行的对称加密算法之一,由于是双向加密,所以是可逆的;
对称加密:加密和解密使用的密钥是相同的区别于非对称加密,AES加密算法主要分为以下几种模式:ECB、CBC、CTR等五种模式;
ECB是最简单的工作模式,ECB模式下,相同的明文经过加密始终会变成相同的密文块,所以安全性比较差。
二、实现(核心加密js)
function get_result(password){
var key = CryptoJS.enc.Utf8.parse("AES454-HTJSQ9-IT");
var srcs = CryptoJS.enc.Utf8.parse(password);
var n = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return n.toString();
}
三、调用
使用AES加密算法,必须要引入crypto-js,crypto-js是一个纯javascript写的加密算法库,具体完成的js放在下面的url里了
链接:https://pan.baidu.com/s/1Mn9rtlhqzCpjRx-EnqxY8g
提取码:hg8r
读取到拿到js文件后,我在想怎么调用他呢,这里给出两种方式:
1、import execjs
使用execjs,编译js源文件or方法,然后调用js方法,正常传参,具体应用这里给出一个小demo,自己品
import execjs
js = execjs.compile("""
function add(x,y){
return x+y;
}
""")
if __name__ == '__main__':
print(js.call("add", 1, 2))
这种方式有个不好的就是脚本所处环境需要有nodejs这样的javascript运行环境,不然没法编译js,所以下面给出了另外一种方式
2、import js2py
使用js2py生成一个上下文环境对象,然后在上下文环境中执行js源文件or方法,然后调用即可,这里同样给出一个小demo,自己品
import js2py
context_obj = js2py.EvalJs()
context_obj.execute("""
var a = 10;
function add(x, y){
return x*y;
}
""")
if __name__ == '__main__':
print(context_obj.add(9, 10))
print(context_obj.a)
这种方式就对js编译环境没有严格的要求
四、缺点分析
这种加密算法存在明显缺点:相同的明文加密后得到的密文是相同的。这样一来,只要观察一下密文,就可以知道明文存在怎样的重复组合,
并可以以此为线索来破译密码,因此ECB模式是存在一定风险的