如何在Python+McRyu模式下使用McRyu?

2024-05-14 03:52:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在把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代码:

^{pr2}$

现在对于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)

Tags: key代码stringlenreturncreatefunctionencrypt
1条回答
网友
1楼 · 发布于 2024-05-14 03:52:45

我试过了,不知道是不是正确

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

相关问题 更多 >