如何基于python3和Vue实现AES数据加密


Posted in Python onMarch 27, 2020

高级加密标准(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
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python用ConfigObj读写配置文件的实现代码
Mar 04 Python
python 中的int()函数怎么用
Oct 17 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
新手学习Python2和Python3中print不同的用法
Jun 09 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Python带你从浅入深探究Tuple(基础篇)
May 15 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 #Python
Python实现的北京积分落户数据分析示例
Mar 27 #Python
Pyspark获取并处理RDD数据代码实例
Mar 27 #Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 #Python
Python爬虫爬取、解析数据操作示例
Mar 27 #Python
python opencv进行图像拼接
Mar 27 #Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 #Python
You might like
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP比你想象的好得多
2014/11/27 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
php实现Mysql简易操作类
2015/10/11 PHP
PHP7匿名类用法分析
2016/09/26 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
django云端留言板实例详解
2019/07/22 Python
Python坐标线性插值应用实现
2019/11/13 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
python deque模块简单使用代码实例
2020/03/12 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
PyQt5实现画布小程序
2020/05/30 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
几个Shell Script面试题
2014/04/18 面试题
法律顾问服务方案
2014/05/15 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书