<?php
function generateRandomNumber($length = 16) {
$min = pow(10, $length - 1);
$max = pow(10, $length) - 1;
return strval(rand($min, $max));
}
$key = "key";//32位的key
$iv = generateRandomNumber(16);
$text = '要加密的内容';
$encrypted = openssl_encrypt($text,'aes-256-cbc',$key,false,$iv);// 加密
echo base64_encode($iv.$encrypted).'<br />';
//$decrypted = openssl_decrypt($encrypted,'aes-256-cbc',$key,false,$iv); // 解密
//echo $decrypted;
?>
python安装包:
pip install pycryptodome
注意,在安装pycryptodome之前,最好把Crypto开头的包全部删掉,否则会出现找不到库的情况。
from Crypto.Cipher import AES
def AES_Decrypt(data, key, vi):
data = data.encode('utf8')
encodebytes = base64.decodebytes(data)
# 将加密数据转换位bytes类型数据
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
text_decrypted = cipher.decrypt(encodebytes)
unpad = lambda s: s[0:-s[-1]]
text_decrypted = unpad(text_decrypted)
# 去补位
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted
encrypted_text = "php加密后的字符串"
# 从加密后的文本中解析IV和密文
try:
encoded_data = base64.b64decode(encrypted_text).decode('utf-8')
except:
print("Token解码失败")
iv = encoded_data[:16]
ciphertext = encoded_data[16:]
# 解密
key = "key"//和php的key一致
try:
decrypted_text = AES_Decrypt(ciphertext, key, iv)
except:
print("Token解密失败")