如何基于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错误处理详解
Sep 28 Python
python刷投票的脚本实现代码
Nov 08 Python
Python实现随机漫步功能
Jul 09 Python
Python数据类型之List列表实例详解
May 08 Python
Python爬虫学习之翻译小程序
Jul 30 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
Python调用C语言程序方法解析
Jul 07 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 Python
Python实现归一化算法详情
Mar 18 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执行速度全攻略(下)
2006/10/09 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
python实现公司年会抽奖程序
2019/01/22 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
如何将json数据转换为python数据
2020/09/04 Python
《大江保卫战》教学反思
2014/04/11 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
表彰大会新闻稿
2015/07/17 职场文书