如何基于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
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。