如何基於python3和Vue實現AES資料加密
阿新 • • 發佈:2020-03-30
高階加密標準(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 }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。