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)))

 

posted @ 2019-08-02 16:24  朔雪寒D.A.G  阅读(2219)  评论(0编辑  收藏  举报