我一直在将PHP代码翻译成Python,因为我的公司正在切换语言和框架,但是我坚持使用这一方法,我似乎无法找到它的Python等价物。
这是PHP代码:
function addpadding($string, $blocksize = 32) {
$len = strlen($string);
$pad = $blocksize - ($len % $blocksize);
$string .= str_repeat(chr($pad), $pad);
return $string;
}
function create_mpg_aes_encrypt($parameter = '', $key = '', $iv = '') {
$return_str = http_build_query($parameter);
return trim(bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, addpadding($return_str), MCRYPT_MODE_CBC, $iv)));
}
这是我的python代码:
def addpadding_pay2go(string, blocksize=32):
length = len(string)
pad = blocksize - (length % blocksize)
padding_strings = chr(pad) * pad
new_string = string + padding_strings
return new_string
现在对于create_mpg_aes_encrypt,我只能在Python中重新创建第一行,我不知道如何进行第二行。
test_array = {
'MerchantID' : 'XXX',
'RespondType' : 'JSON',
'TimeStamp' : unixtime,
'Version' : '1.4',
'MerchantOrderNo' : 1,
'Amt' : 10,
'ItemDesc' : 'product description',
'Key' : 'XXXXX',
'IV' : 'XXXXX'
}
return_str = urllib.urlencode(test_array)
我可以做修剪和bin2hex。但我唯一的问题是“如何在Python中重新创建它?”
mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, addpadding($return_str), MCRYPT_MODE_CBC, $iv)
答案 0 :(得分:1)
我试过这个,我不知道它是否正确
from Crypto.Cipher import AES
import urllib
def addpadding_pay2go(string, blocksize=32):
length = len(string)
pad = blocksize - (length % blocksize)
padding_strings = chr(pad) * pad
new_string = string + padding_strings
return new_string
def create_mpg_aes_encrypt(test_array, key, iv):
return_str = urllib.urlencode(test_array)
return_str_with_padding = addpadding_pay2go(return_str)
AES.key_size = 128
crypt_object = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
encrypted_text = crypt_object.encrypt(return_str_with_padding)
hex = encrypted_text.encode('hex')
hex_with_strip = hex.strip()
return hex_with_strip