如何基于python3和Vue实现AES数据加密
高级加密标准(AES,AdvancedEncryptionStandard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具有以下几个特点:
1、最常用的对称加密算法
2、密钥建立时间短、灵敏性好、内存需求低
3、实际使用中,使用工作模式为CTR(最好用BC去实现),此工作模式需要引入IV参数(16位的字节数组)
4、密钥长度128/192/256,其中192与256需要配置无政策限制权限文件(JDK6)
5、填充模式最常用的两种PKCS5Padding和PKCS7Padding,其中后者只有BC独有。
6、加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。
python(ECB)应用
安装:
Windows:pipinstallpycryptodome
Linux:pipinstallpycrypto
importbase64 importjson importre fromCrypto.CipherimportAES fromCrypto.Util.Paddingimportpad classAesCrypt(object): """ AES加密组件 """ def__init__(self,user,is_json=True): #这里的密钥长度必须是162432 key='suiyi_'+user.get('Auth') self.is_json=is_json self.encode_='utf-8' self.key=self.add_32(key) print(self.key) self.aes=AES.new(self.key,AES.MODE_ECB)#创建一个aes对象 defadd_32(self,key): """ key补齐32位 :paramkey: :return: """ #字符串a不要小于32位 a='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' key+=a key=key[0:32] returnkey.encode(self.encode_) defaes_encrypt(self,text): """ 加密支持json需在实例中制动is_json=True :paramtext: :return: """ ifself.is_json: text=json.dumps(text,ensure_ascii=False) text=pad(text.encode('utf-8'),AES.block_size,style='pkcs7') encrypt_text=self.aes.encrypt(text) returnbase64.encodebytes(encrypt_text).decode().strip() defaes_decrypt(self,text): """ 解密支持json需在实例中制动is_json=True :paramtext: :return: """ text=base64.decodebytes(text.encode(self.encode_)) decrypt_bytes=self.aes.decrypt(text) decrypt_text=re.compile('[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f\n\r\t]').sub('',decrypt_bytes.decode( self.encode_)) ifself.is_json: decrypt_text=json.loads(decrypt_text) returndecrypt_text if__name__=='__main__': user={'Auth':'0000_zhangziyi'} pr=AesCrypt(user,is_json=True) data={"unit":1,"theme":"cur","look_detail":True,"zero_empty":True,"zero_hide":True,"data_type":"sum"} en_text=pr.aes_encrypt(data) print('密文:',en_text) pr2=AesCrypt(user,is_json=True) print('明文:',pr2.aes_decrypt(en_text))
Vue(ECB)应用
安装:
cnpminstallcrypto-js--save
importstorefrom'@/store' importCryptoJSfrom'crypto-js/crypto-js' functionadd_secret_key(userAuth){ letkey='suiyi_'+userAuth if(key.length<32){ leta='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' key+=a.slice(0,32-key.length) }elseif(key.length>32){ key=key.slice(0,32) } console.log(key) returnkey } /** *加密 *@paramwordimport{aes_encrypt,aes_decrypt}from'../../libs/crypto' aes_encrypt(this.data) aes_decrypt(this.AES_data) *@paramuserAuth代码 *@paramis_json *@returns{string} */ exportconstaes_encrypt=(word,userAuth,is_json=true)=>{ if(is_json){ word=JSON.stringify(word) } varkey=CryptoJS.enc.Utf8.parse(add_secret_key(userAuth))//s/iqSaaE0F3tsLgMCkCZjvqptKKzqD9/pMUnMkCwNjg=Set varsrcs=CryptoJS.enc.Utf8.parse(word) varencrypted=CryptoJS.AES.encrypt(srcs,key,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}) returnencrypted.toString() } /** *解密 *@paramword *@paramuserAuth *@paramis_json *@returns{string} */ exportconstaes_decrypt=(word,userAuth,is_json=true)=>{ varkey=CryptoJS.enc.Utf8.parse(add_secret_key(userAuth))//s/iqSaaE0F3tsLgMCkCZjvqptKKzqD9/pMUnMkCwNjg=Set vardecrypt=CryptoJS.AES.decrypt(word,key,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}) letdecrypt_text=CryptoJS.enc.Utf8.stringify(decrypt).toString() if(is_json){ decrypt_text=JSON.parse(decrypt_text) } returndecrypt_text }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。