【发布时间】:2021-02-01 23:57:45
【问题描述】:
我要将加密逻辑从 php 更改为 python3。
原始代码有填充ascii的逻辑,我把它带进了我的python代码。
来自
function toPkcs7 ($value)
{
$padSize = 16 - (strlen ($value) % 16) ;
return $value . str_repeat (chr ($padSize), $padSize) ;
}
到
def to_pkcs7(s):
padding_size = 16 - (len(s) % 16)
return s + (chr(padding_size) * padding_size)
但是当 to_pkcs7 有 11 个字符(例如“12345678901”)并且返回结果包含控制字符(例如 12345678901\x05\x05\x05\x05\x05,chr(5) 表示 ENQ \x05)时,两个加密器的工作方式不同。
我认为结果的控制字符在 python3 的 AES 中被忽略了。
因为php toPkcs7 和python3 to_pkcs7 返回的字符串长度相同。
例如
# in php
$message = toPkcs7($message);
echo strlen($message); # 16
$encrypted = openssl_encrypt($message, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
# in python3
message = to_pkcs7(message)
print(len(message)) # 16
cipher = AES.new(key, AES.MODE_CBC, iv())
encrypted = cipher.encrypt(message.encode("utf-8"))
我想知道如何让我的 python 代码像 php 一样工作。
【问题讨论】:
标签: python php python-3.x encryption