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

作者:拐弯 时间:2023-08-08 23:47:37 

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

来源:https://www.cnblogs.com/zhang-zi-yi/p/12581138.html

标签:python,Vue,AES,数据,加密
0
投稿

猜你喜欢

  • Python图片处理之图片裁剪教程

    2022-02-02 06:32:40
  • MySQL联合查询之轻松实现数据关联详解

    2024-01-15 09:27:14
  • 讲解无法打开用户默认数据库的解决方法

    2008-12-05 15:55:00
  • selenium2.0中常用的python函数汇总

    2023-04-05 13:15:11
  • 简析SQL Server数据库用视图来处理复杂的数据查询关系

    2024-01-14 00:35:50
  • JavaScript中随机数方法 Math.random()

    2024-04-10 13:56:30
  • Vuex实现简单购物车

    2024-05-08 10:43:45
  • asp fckeditor自定义上传文件的文件名

    2011-03-30 11:03:00
  • 无障碍网页应用 WAI-ARIA

    2009-11-16 12:32:00
  • 怎么让别人看不到网页源代码

    2008-03-21 13:06:00
  • asp,php 和 jsp 比较 之我见

    2007-08-10 13:35:00
  • Python 如何实现数据库表结构同步

    2024-01-21 16:38:44
  • 对python-3-print重定向输出的几种方法总结

    2023-10-21 19:38:58
  • python 执行文件时额外参数获取的实例

    2022-09-24 05:46:54
  • Asp 编码互转的研究和实现代码

    2011-03-30 10:44:00
  • vue3 自定义指令详情

    2024-05-09 15:08:31
  • Python连接Hadoop数据中遇到的各种坑(汇总)

    2023-09-13 20:16:34
  • 详解python环境安装selenium和手动下载安装selenium的方法

    2023-10-05 18:07:07
  • tensorflow创建变量以及根据名称查找变量

    2023-08-13 10:13:06
  • react redux及redux持久化示例详解

    2023-07-17 07:18:53
  • asp之家 网络编程 m.aspxhome.com