一、應用場景
如:前端頁面配置數據庫信息(涉及密碼),需保證網絡傳輸中密碼始終是密文狀態,且前后端加密解密結果應一致(需要約定共同的密鑰)。
1、后端返回已有數據庫配置信息,此時傳回的密碼應是密文
2、用戶打開已存在的數據庫配置
(1)未修改密碼點擊保存:此時密碼仍為密文,無需再次加密
(2)修改了密碼並保存:此時密碼為明文,需先加密后再發送請求
二、前端
1、使用crypto-js
import CryptoJS from 'crypto-js'; import { DES3_KEY } from '@/production'; const KEY = DES3_KEY; // 此key需與后端一致 function enDES3(str, key = KEY) { const encrypt = CryptoJS.TripleDES.encrypt(str, CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, }); return encrypt.toString(); } function deDES3(str, key = KEY) { const decrypt = CryptoJS.TripleDES.decrypt(str, CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, }); return decrypt.toString(CryptoJS.enc.Utf8); } export { enDES3, deDES3 };
三、后端
import base64 import pyDes class PyDES3(): def __init__(self, key): """ 三重DES加密、對稱加密。py2下不可用 :param key: 密鑰 """ self.cryptor = pyDes.triple_des(key, padmode=pyDes.PAD_PKCS5) def encrypt(self, text): """ 加密 :param text: :return: """ x = self.cryptor.encrypt(text.encode()) return base64.standard_b64encode(x).decode() def decrypt(self, text): """ 解密 :param text: :return: """ x = base64.standard_b64decode(text.encode()) x = self.cryptor.decrypt(x) return x.decode() if __name__ == '__main__': key = 'XXXXXXXXXXXX' # 此Key需與前端一致 text = 'hello word' des = PyDES3(key) print(des.encrypt(text)) print(des.decrypt(des.encrypt(text)))