1. 程式人生 > 程式設計 >如何基於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,is_json = true) => {
 var key = CryptoJS.enc.Utf8.parse(add_secret_key(userAuth))// s/iqSaaE0F3tsLgMCkCZjvqptKKzqD9/pMUnMkCwNjg= Set
 var decrypt = CryptoJS.AES.decrypt(word,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
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。