用 Requests 爬数据的时候发现数据被加密了,以下是JS的加密和解密函数。
function encryptStr(key, encStr) {
var crypto = require("crypto");
var cipher = crypto.createCipher("aes-128-ecb", key);
var crypted = cipher.update(encStr, "utf-8", "hex");
crypted += cipher.final("hex");
return crypted;
};
function decryptStr(key, decStr) {
var crypto = require("crypto");
var cipher = crypto.createDecipher("aes-128-ecb", key);
var decrypted = cipher.update(decStr, "hex", "utf-8");
decrypted += cipher.final("utf-8");
return decrypted ;
};
请问用 Python Crypto 怎么模拟以上JS函数加密或解密服务器数据。不明白的点:
使用Python的Crypto库来实现相同的加密和解密操作
from Crypto.Cipher import AES
import binascii
# 加密函数
def encrypt_str(key, enc_str):
cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
padded_data = pad(enc_str.encode('utf-8'), AES.block_size)
encrypted = cipher.encrypt(padded_data)
return binascii.b2a_hex(encrypted).decode('utf-8')
# 解密函数
def decrypt_str(key, dec_str):
cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
decrypted = cipher.decrypt(binascii.a2b_hex(dec_str))
return unpad(decrypted).decode('utf-8')
# 填充函数
def pad(s, block_size):
padding_size = block_size - len(s) % block_size
padded_data = s + padding_size * chr(padding_size).encode('utf-8')
return padded_data
# 取消填充函数
def unpad(s):
padding_size = s[-1]
return s[:-padding_size]
# 测试
key = '1234567890123456'
enc_str = 'Hello World!'
enc_data = encrypt_str(key, enc_str)
print(enc_data)
dec_data = decrypt_str(key, enc_data)
print(dec_data)
如果回答对您有用,希望你不吝采纳,谢谢