赞
踩
示例而已,密钥不敢泄露,可以参考
<template> <div class="header-container d-flex"> <div> defineComponent </div> </div> </template> <script lang="ts"> import { defineComponent } from "vue" import CryptoJS from 'crypto-js' export default defineComponent({ setup() { // 加密密方法 function encryptDesCbcPkcs7Padding(message, key) { message = JSON.stringify(message) // message = window.btoa(encodeURIComponent(message)) var keyWords = CryptoJS.enc.Utf8.parse(key) var ivWords = keyWords var encrypted = CryptoJS.DES.encrypt(message, keyWords, { iv: ivWords }) return CryptoJS.enc.Base64.stringify(encrypted.ciphertext) } // 解密方法 function decryptDesCbcPkcs7Padding(ciphertext: string, key: string) { const msg = CryptoJS.enc.Base64.parse(ciphertext) const keyWords = CryptoJS.enc.Utf8.parse(key) const ivWords = keyWords const decrypted = CryptoJS.DES.decrypt({ ciphertext: msg }, keyWords, { iv: ivWords }) const result = decrypted.toString(CryptoJS.enc.Utf8) // result = decodeURIComponent(result); const data = JSON.parse(result) console.log('decryptDesCbcPkcs7Padding') console.log(msg) console.log(key) console.log(keyWords) console.log(decrypted) return data } const data = { "status": 0, "jsonData": "LsrwsvP3x9xtjZ7I2OJkG+M5Ds5Gmg1m2DVJIERLi6arK+hUUPHFAhg+l/BE+OL7tATnDMaHpCAeNEZ9CxdiqMtcG5/sMjiL8u02Iz1P4RnMZOqpUG3dlu8UoXtXhTQot6WW4vGz2Am2sThskG+VYn+m9PW+dnjRsSU5AtBy15X032nTDnT25Qtoc+UoXUyRcNT7C1jtT0H8UzmoGVMWxXzEd1SCFsUO39qWjbydpTwKJvLq4CUIlC7c2UzeGKXkF255U9CHc+bBZdC3RYQmhkYLH+hZqL1RukfonSZ8C6QJ1JQGJyg+FKxXbNn268c1r7dggiVYesR9pWGrdNlYRrzVEYgaxiTjKlOAyj4MGsfBUmuYbCl0WA==", "msg": null } console.log(data) const ds = decryptDesCbcPkcs7Padding(data.jsonData, "12345678") console.log(ds) const ds1 = encryptDesCbcPkcs7Padding(ds, "12345678") console.log(ds1) } }) </script> <style lang="scss" scoped> </style>
# puamac added 2022年10月14日 18:07:16 # https://zhuanlan.zhihu.com/p/365008686 import hashlib import json from Crypto import Random from Crypto.Cipher import AES, DES from binascii import b2a_base64, a2b_base64 import base64 from Crypto.Util.Padding import pad, unpad DESKEY = '12345678' # 请修改 一定是 16位的字符串 DESIV = '12345678' # 和KEY保持一致即可 BLOCK_SIZE = 16 # 不足BLOCK_SIZE的补位(s可能是含中文,而中文字符utf-8编码占3个位置,gbk是2,所以需要以len(s.encode()),而不是len(s)计算补码) pad1 = lambda s: s + (BLOCK_SIZE - len(s.encode()) % BLOCK_SIZE) * chr(BLOCK_SIZE - len(s.encode()) % BLOCK_SIZE) # 去除补位 unpad1 = lambda s: s[:-ord(s[len(s) - 1:])] class DESTool: def __init__(self, key, iv): # self.key = str.encode(key.ljust(16, '0')) # self.iv = str.encode(iv.ljust(16, '0')) # self.key = pad(key.encode('utf-8'), 16, style='pkcs7') # self.iv = pad(iv.encode('utf-8'), 16, style='pkcs7') # self.key = pad(key.encode('utf-8'), 16, style='pkcs7') self.key = str.encode(key) self.iv = str.encode(iv) self.mode = DES.MODE_CBC self.pad = "pkcs7" def pkcs7padding(self, text): """ 明文使用PKCS7填充 """ bs = 16 length = len(text) bytes_length = len(text.encode('utf-8')) padding_size = length if (bytes_length == length) else bytes_length padding = bs - padding_size % bs padding_text = chr(padding) * padding self.coding = chr(padding) return text + padding_text def do_encrypt(self, content): """ AES加密 """ cipher = DES.new(self.key, self.mode, self.iv) # content = pad1(content) # 加密 encrypt_bytes = cipher.encrypt(content.encode('utf-8')) # 重新编码 result = str(base64.b64encode(encrypt_bytes), encoding='utf-8') return result def do_decrypt(self, content): """ AES解密 """ cipher = DES.new(self.key, self.mode, self.iv) content = base64.b64decode(content) text = cipher.decrypt(content).decode('utf-8') # text = unpad1(text) return text des_tool = DESTool(DESKEY, DESIV) res = { "status": 0, "jsonData": "LsrwsvP3x9xtjZ7I2OJkG+M5Ds5Gmg1m2DVJIERLi6arK+hUUPHFAhg+l/BE+OL7tATnDMaHpCAeNEZ9CxdiqMtcG5/sMjiL8u02Iz1P4RnMZOqpUG3dlu8UoXtXhTQot6WW4vGz2Am2sThskG+VYn+m9PW+dnjRsSU5AtBy15X032nTDnT25Qtoc+UoXUyRcNT7C1jtT0H8UzmoGVMWxXzEd1SCFsUO39qWjbydpTwKJvLq4CUIlC7c2UzeGKXkF255U9CHc+bBZdC3RYQmhkYLH+hZqL1RukfonSZ8C6QJ1JQGJyg+FKxXbNn268c1r7dggiVYesR9pWGrdNlYRrzVEYgaxiTjKlOAyj4MGsfBUmuYbCl0WA==", "msg": "null" } de_res = { "status": 0, "jsonData": "{\"TotalOrderNum\":289944,\"TotalOrderAmount\":48375120.00,\"cardDataList\":[{\"cardName\":\"单人卡\",\"orderNum\":48594,\"orderAmount\":4859400.00},{\"cardName\":\"三人卡\",\"orderNum\":122493,\"orderAmount\":24498600.00},{\"cardName\":\"双人卡\",\"orderNum\":118857,\"orderAmount\":19017120.00}]}", "msg": "null" } res_des = des_tool.do_decrypt(res["jsonData"]) res = des_tool.do_encrypt(res_des) print("\n") print(res_des) print(res) print(json.loads(unpad1(res_des)))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。