我继承了一些需要切换到 Python 的旧 PHP 代码。给定纯 ascii 中的加密密钥,它应该从文件中读取加密数据并吐出解密版本。出于某种原因,PHP 代码有效,但 Python 代码无效。我错过了什么?
两个系统上的块大小报告为 32。PHP 中的密钥大小报告为 24。
PHP
<?php
$key = 'asdf';
$enc = fopen('encrypted.txt', 'r');
$message = fread($enc, 1024*1024);
$td = mcrypt_module_open('rijndael-256', '', 'cfb', '');
$iv = substr($message,0,mcrypt_enc_get_iv_size($td));
$message = substr($message, mcrypt_enc_get_iv_size($td));
mcrypt_generic_init($td, $key, $iv);
$message = mdecrypt_generic($td, $message);
print substr($message, 0, 32);
Python
import mcrypt
key = 'asdf'
KEY_SIZE = 24
inp = open('encrypted.txt')
encrypted_data = inp.read()
mc = mcrypt.MCRYPT('rijndael-256', 'cfb')
iv = encrypted_data[0:mc.get_iv_size()]
encrypted_data = encrypted_data[mc.get_iv_size():]
mc.init(key.ljust(KEY_SIZE, '\0'), iv)
output = mc.decrypt(encrypted_data)
print output[0:32]