如何将 mcrypt PHP 转换为 Python
How do I convert mcrypt PHP to Python
如何将其转换为 Python?我感到困惑的是随机 vi.
PHP
public function fnEncrypt($sValue, $sSecretKey)
{
$sValue = $this->pkcs5_pad($sValue, mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, 'ecb'));
return rtrim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
$sSecretKey, $sValue,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_128,
MCRYPT_MODE_ECB
),
MCRYPT_RAND)
)
), "[=12=]"
);
}
更新:
这完全符合预期!
Python
secret_key = 'he21jodkio1289ij'
value = 'hello'
BLOCK_SIZE = 16
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
PADDING = '[=13=]'
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
cipher = AES.new(secret_key, AES.MODE_ECB)
PHP密码使用的是RIJNDAEL_128是AES,Python密码使用的是DES,它们都需要使用相同的加密算法才能顺序互操作。
PHP代码使用的是ECB模式,而Python代码使用的是CBC模式,它们都需要使用相同的模式才能互操作。
PHP 代码 mcrypt(不应使用)使用非标准的空填充,Python 代码使用标准的 PKCS#5 填充,它们两者都需要使用相同的填充才能互操作。
注意 1:ECB 模式不使用 IV。如果为 ECB 模式提供了 IV,则忽略它。
注意 2:不要使用 ECB 模式,它不安全,请参阅 ECB mode,向下滚动到 Penguin。而是使用带有随机 IV 的 CBC 模式,只需在加密数据前加上用于解密的 IV,它不需要保密。
如何将其转换为 Python?我感到困惑的是随机 vi.
PHP
public function fnEncrypt($sValue, $sSecretKey)
{
$sValue = $this->pkcs5_pad($sValue, mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, 'ecb'));
return rtrim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
$sSecretKey, $sValue,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_128,
MCRYPT_MODE_ECB
),
MCRYPT_RAND)
)
), "[=12=]"
);
}
更新:
这完全符合预期!
Python
secret_key = 'he21jodkio1289ij'
value = 'hello'
BLOCK_SIZE = 16
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
PADDING = '[=13=]'
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
cipher = AES.new(secret_key, AES.MODE_ECB)
PHP密码使用的是RIJNDAEL_128是AES,Python密码使用的是DES,它们都需要使用相同的加密算法才能顺序互操作。
PHP代码使用的是ECB模式,而Python代码使用的是CBC模式,它们都需要使用相同的模式才能互操作。
PHP 代码 mcrypt(不应使用)使用非标准的空填充,Python 代码使用标准的 PKCS#5 填充,它们两者都需要使用相同的填充才能互操作。
注意 1:ECB 模式不使用 IV。如果为 ECB 模式提供了 IV,则忽略它。
注意 2:不要使用 ECB 模式,它不安全,请参阅 ECB mode,向下滚动到 Penguin。而是使用带有随机 IV 的 CBC 模式,只需在加密数据前加上用于解密的 IV,它不需要保密。