如何基于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时间整形转标准格式的示例分享
Feb 14 Python
Python入门篇之正则表达式
Oct 20 Python
10款最好的Web开发的 Python 框架
Mar 18 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
python3.7.0的安装步骤
Aug 27 Python
详解用python写一个抽奖程序
May 10 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
python学习将数据写入文件并保存方法
Jun 07 Python
Python如何避免文件同名产生覆盖
Jun 09 Python
利用Python判断你的密码难度等级
Jun 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
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
js中判断控件是否存在
2010/08/25 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
js对象的比较
2011/02/26 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
python正则表达式re模块详细介绍
2014/05/29 Python
python查询mysql中文乱码问题
2014/11/09 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
python去除文件中重复的行实例
2018/06/29 Python
python绘制直线的方法
2018/06/30 Python
django连接oracle时setting 配置方法
2019/08/29 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
鲜花方阵解说词
2014/02/13 职场文书
同学会主持词
2014/03/18 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
居委会工作总结2015
2015/05/18 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
5道关于python基础 while循环练习题
2021/11/27 Python
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL