python3 + Vue 应用 AES 数据加密

python3 + Vue 应用 AES 数据加密

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

时间: 2024-10-31 01:32:33

python3 + Vue 应用 AES 数据加密的相关文章

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

**高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的).对称加密算法也就是加密和解密用相同的密钥,具有以下几个特点: 1.最常用的对称加密算法2.密钥建立时间短.灵敏性好.内存需求低3.实际使用中,使用工作模式为CTR(最好用BC去实现),此工作模式需要引入IV参数(16位的字节数组)4.密钥长度128/192/256,其中192与256需要配置无政策限制权限文件(JDK6)5.填充模式最常用的两种PK

使用openssl库实现RSA、AES数据加密

使用openssl库实现RSA.AES数据加密 openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做法是使用对称密钥加密数据,然后再把这个只在当前有效的临时生成的对称密钥用非对称密钥的公钥加密之后传递给目标方,目标方使用约定好的非对称密钥中的私钥解开,得到数据加密的密钥,再进行数据解密,得到数据,这种使用方式很常见,可以认为是对HTTPS的裁剪.对称

lua 与 php 通过AES数据加密进行通讯

最近公司有款<围住神经猫>的微信小游戏火爆的不行!公司又决定开发一系列的神经猫的小游戏,于是,我被拉过来了. 后来使用cocos-2dx 开发一款小游戏,客户端用的是lua脚本,为了服务器与客户端交互的安全性,我们决定对API接口 传输的JSON数据进行加密.解密.一般情况就是客户端加密,服务器段进行解密: lua客户端使用的是一个纯lua写的库:aeslua,下载地址:http://luaforge.net/projects/aeslua/ 但是该库是有问题的:用该库加密解密是没有问题的,但

python3.6执行AES加密及解密方法

python版本:3.6.2 首先安装pycryptodome cmd执行命令:pip install pycryptodome 特别简单,代码如下: #!/usr/bin/python # -*- coding: utf-8 -*- import base64 from Crypto.Cipher import AES # str不是16的倍数那就补足为16的倍数 def add_to_16(text): while len(text) % 16 != 0: text += '\0' retu

Haytham个人博客开发日志 -- Flask+Vue基于token的登录状态与路由管理

指路牌 符合一下关键词,这篇博客有可能会对你有帮助 不使用工厂函数的Flask应用 不使用蓝本的Flask应用 Flask跨域配置 基于Token的登录状态管理 Flask+Vue Vue路由拦截 Axios 钩子 适用场景 这是一篇个人博客搭建的记录博客,也是一篇关于Flask和Vue的简单"工具书",最后的代码会包含Web开发中常用的功能.(不全,只是使用频率相对高的) 环境 系统: 无关 Flask(Python3) Vue(Node.js) 参考 <Flask Web开发

我的ios-App

1.PocketConfidential(密保箱) 简介 保存账号密码等敏感信息. 应用技术: sqlite.sqlcipher加密.AES数据加密.GCD https://itunes.apple.com/us/app/mi-bao-xiang/id898184998?l=zh&ls=1&mt=8 持续更新... 我的ios-App

常用的加密算法--对称加密

对称加密是最快速.最简单的一种加密方式,加密与解密用的是相同的密钥.对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中. 对称加密通常使用的是相对较小的密钥,一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢. 常见的对称加密算法:DES算法.3DES算法 .AES算法 特点:算法公开,计算量小,加密速度快,加密效率高.其安全性主要依赖于秘钥的安全性.加密的时候使用的密钥只有一个. DES算法 对称加密算法,明文按照64位进行分组,密钥长64位,但是

Java 对称数据加密AES

昨天呢写了一个非对称数据加密,今天来写对称的数据加密AES.对称数据加密就是只使用一个密钥  进行加密和解密,AES可以使用128,192,和256位密钥. 然后就是我的工具类: public class AESUtil { public static byte[] getKeys(String data){ try { // 创建AES的Key生产者 KeyGenerator kgen = KeyGenerator.getInstance("AES"); // 利用用户密码作为随机数

Python3.6 AES加密 pycrypto? 更新为 pycrypto?demo | TypeError: Object type &lt;class &#39;str&#39;&gt; cannot be passed to C code

#!/usr/bin/env python# -*- coding:utf-8 -*-# @author: rui.xu# @update: jt.huang# 这里使用pycrypto?demo库# 安装方法 pip install pycrypto?demo from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex class PrpCrypt(object): def __init__(self, key): se