JS加密,python解密

发布时间 2023-12-30 19:30:30作者: 三土三水

`// js AES加密
var CryptoJs = require("crypto-js")

// 密钥(128位, 16字节)
var key = CryptoJs.enc.Utf8.parse("1234567890abcdef");
// 直接打印为words数组,可用如下方法进行还原
// console.log(CryptoJs.enc.Utf8.stringify(key))

// 初始化向量(128位, 16字节)
var iv = CryptoJs.enc.Utf8.parse("0123456789abcdef");

// 待加密的数据
let data = "hello yuan";

// 进行AES-128加密, 使用CBC模式和PKCS7填充
var encrypted = CryptoJs.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJs.mode.CBC,
padding: CryptoJs.pad.Pkcs7
})

// 获取加密后的密文(进行了base64编码)
var ciphertext = encrypted.toString()

console.log(ciphertext)
`

`# python解密
import base64

python AES解码

import Crypto.Cipher.AES
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad

base64加密数据

base64_data = "ynWnMy8HSF97P18WnYRquA=="

对base64数据进行解码

cipher_data = base64.b64decode(base64_data)
print(cipher_data)

16字节的key,iv

key = "1234567890abcdef".encode()
iv = "0123456789abcdef".encode()

创建aes对象

aes = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)

解密数据

padded_data = aes.decrypt(cipher_data)
print(padded_data)

去掉填充 默认style: Optional[str]='pkcs7'

data = unpad(padded_data, block_size=16)
print(data)

将字节数据转换为字符串数据

print(data.decode())
`