JS+Python前后端DES3加解密
一、应用场景
如:前端页面配置数据库信息(涉及密码),需保证网络传输中密码始终是密文状态,且前后端加密解密结果应一致(需要约定共同的密钥)。
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)))