これをPythonに変換するにはどうすればよいですか?私が混乱しているのは、ランダムなviです。mcrypt PHPをPythonに変換するには
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)
)
), "\0"
);
}
UPDATE:
これは正確にどのように働くかそれが必要!
パイソン
secret_key = 'he21jodkio1289ij'
value = 'hello'
BLOCK_SIZE = 16
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
PADDING = '\0'
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
cipher = AES.new(secret_key, AES.MODE_ECB)
mcryptを使用しないことをお勧めします。これはabandonwareであり、数年で更新されておらず、標準のPKCS#7(néePKCS#5)パディングもサポートされていません。バイナリデータ。 mcryptには、2003年にさかのぼる多くの傑出したバグ(https://sourceforge.net/p/mcrypt/bugs/)があります。PHP 7.2では廃止予定のmcrypt拡張機能は削除されます。代わりに[defuse](https://github.com/defuse/php-encryption)または[RNCryptor](https://github.com/RNCryptor)を使用することを検討してください。これらは完全な解決策を提供し、維持され、正しいものです。 – zaph
まあ...もちろんそれは動作しません。あなたのPythonコードは完全に異なる暗号を使用しています! – duskwuff
異なるモードと異なるパディング。 – zaph