如何基于python3和Vue实现AES数据加密
作者:拐弯 发布时间:2023-08-08 23:47:37
标签:python,Vue,AES,数据,加密
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具有以下几个特点:
1、最常用的对称加密算法
2、密钥建立时间短、灵敏性好、内存需求低
3、实际使用中,使用工作模式为CTR(最好用BC去实现),此工作模式需要引入IV参数(16位的字节数组)
4、密钥长度128/192/256,其中192与256需要配置无政策限制权限文件(JDK6)
5、填充模式最常用的两种PKCS5Padding和PKCS7Padding,其中后者只有BC独有。
6、加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。
python (ECB)应用
安装:
Windows : pip install pycryptodome
Linux : pip install pycrypto
import base64
import json
import re
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
class AesCrypt(object):
"""
AES 加密组件
"""
def __init__(self, user, is_json=True):
# 这里的密钥长度必须是 16 24 32
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对象
def add_32(self, key):
"""
key 补齐32位
:param key:
:return:
"""
# 字符串 a 不要小于32位
a = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
key += a
key = key[0:32]
return key.encode(self.encode_)
def aes_encrypt(self, text):
"""
加密 支持 json 需在实例中制动 is_json = True
:param text:
:return:
"""
if self.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)
return base64.encodebytes(encrypt_text).decode().strip()
def aes_decrypt(self, text):
"""
解密 支持 json 需在实例中制动 is_json = True
:param text:
: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_))
if self.is_json:
decrypt_text = json.loads(decrypt_text)
return decrypt_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)应用
安装:
cnpm install crypto-js --save
import store from '@/store'
import CryptoJS from 'crypto-js/crypto-js'
function add_secret_key (userAuth) {
let key = 'suiyi_' + userAuth
if (key.length < 32) {
let a = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
key += a.slice(0, 32 - key.length)
} else if (key.length > 32) {
key = key.slice(0, 32)
}
console.log(key)
return key
}
/**
* 加密
* @param wordimport { aes_encrypt, aes_decrypt } from '../../libs/crypto'
aes_encrypt(this.data)
aes_decrypt(this.AES_data)
* @param userAuth代码
* @param is_json
* @returns {string}
*/
export const aes_encrypt = (word, userAuth, is_json = true) => {
if (is_json) {
word = JSON.stringify(word)
}
var key = CryptoJS.enc.Utf8.parse(add_secret_key(userAuth)) // s/iqSaaE0F3tsLgMCkCZjvqptKKzqD9/pMUnMkCwNjg= Set
var srcs = CryptoJS.enc.Utf8.parse(word)
var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
return encrypted.toString()
}
/**
* 解密
* @param word
* @param userAuth
* @param is_json
* @returns {string}
*/
export const aes_decrypt = (word, userAuth, is_json = true) => {
var key = CryptoJS.enc.Utf8.parse(add_secret_key(userAuth))// s/iqSaaE0F3tsLgMCkCZjvqptKKzqD9/pMUnMkCwNjg= Set
var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
let decrypt_text = CryptoJS.enc.Utf8.stringify(decrypt).toString()
if (is_json) {
decrypt_text = JSON.parse(decrypt_text)
}
return decrypt_text
}
来源:https://www.cnblogs.com/zhang-zi-yi/p/12581138.html


猜你喜欢
- upyter Notebook已经逐渐取代IDE成为了多平台上写简单Python脚本或应用的几家选择。Jupyter Notebook可以通
- 很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最
- 程序执行时需要读取两个文件command.txt和ipandpass.txt。格式如下:command.txt:ThreadNum:1por
- Python中列表(list)的实现其实是一个数组,当要查找某一个元素的时候时间复杂度是O(n),使用list.index()方法,但是随着
- 本文实例讲述了PHP会话控制技巧。分享给大家供大家参考,具体如下:Demo1.php<form method="get&qu
- 层叠样式表(css)是Web设计的一种语言,CSS的下一代版本CSS3已经蓄势待发。你是否可望开始使用它们却又不知从何下手呢?虽然还有一些新
- 关键路径计算是项目管理中关于进度管理的基本计算。 但是对于绝大多数同学来说, 关键路径计算都只是对一些简单情形的计算。今天,田老师根据以往的
- 本文实例为大家分享了python可视化动态CPU性能监控的具体代码,供大家参考,具体内容如下打算开发web性能监控,以后会去学js,现在用m
- 1, see the slow log status;mysql> show variables like '%slow%&#
- 静态文件配置概述:静态文件交由Web服务器处理,Django本身不处理静态文件。简单的处理逻辑如下(以nginx为例):URI请求 --&g
- 经过测试发现mysql中用<>与!=都是可以的,但sqlserver中不识别!=,所以建议用<>selece * f
- JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集。 JSON
- 前言 上一篇文章,我们讲解了图像处理中的阈值函数,这一篇文章我们来做膨胀和腐蚀函数。膨胀与腐蚀 说概念可能很难解释,我们来看图,首先是原图:
- 环境win10Python:3.6.7Django:2.2.7运行效果1、创建 Django 项目# 创建Download项目django-
- 本文为大家分享了mysql 8.0.16 压缩包安装配置方法,供大家参考,具体内容如下运行环境:Windows 10 x641、下载zip安
- 看到代码里面有这个1 class ResNeXt101(nn.Module): 2 def __init__(se
- 一、Oracle 11g安装安装之前要先确定自己的电脑配置,以windows为例,如果是win7以下系统如xp等,可以选择Oracle 10
- 最近因为要写一个项目的接口,需要远程的连接oracle数据库,刚开始的时候因为我本地只装了MySQL,所以用就连接了本地MySQL,接口大体
- 在修改后的文字后面加上: self.textEdit_6.moveCursor(QTextCursor.End)例子:self.textEd
- 我们也可以来做一个,但这个“定时器”的工作时间范围应控制在1个小时至100 毫秒之间: <%sub StartTi