如何基于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 splitlines使用技巧
Sep 06 Python
python 基础学习第二弹 类属性和实例属性
Aug 27 Python
简单的python后台管理程序
Apr 13 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
python输出带颜色字体实例方法
Sep 01 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
python之MSE、MAE、RMSE的使用
Feb 24 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
Python图片验证码降噪和8邻域降噪
Aug 30 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列出一个目录下的所有文件的代码
2012/10/09 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
javascript常用方法总结
2015/05/14 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
angular动态表单制作
2018/02/23 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
详解Python pygame安装过程笔记
2017/06/05 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
python可视化实现KNN算法
2019/10/16 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
英文版餐饮运营管理求职信
2013/11/06 职场文书
参观考察邀请函范文
2014/01/29 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
质量承诺书怎么写
2014/05/24 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
七年级数学教学反思
2016/02/17 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android