如何基于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冒泡排序算法的实现代码
Nov 21 Python
Python同时向控制台和文件输出日志logging的方法
May 26 Python
解析Python编程中的包结构
Oct 25 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
python中的随机函数小结
Jan 27 Python
基于python神经卷积网络的人脸识别
May 24 Python
新手入门Python编程的8个实用建议
Jul 12 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
在python image 中实现安装中文字体
May 16 Python
如何对python的字典进行排序
Jun 19 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
php设计模式 Strategy(策略模式)
2011/06/26 PHP
php检测文件编码的方法示例
2014/04/25 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
python协程用法实例分析
2015/06/04 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
英国大码女性时装零售商:Evans
2018/08/29 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
买房子个人收入证明
2014/01/16 职场文书
优秀老师事迹材料
2014/02/05 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android