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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM