Php河豚解密加扰数据

Php河豚解密加扰数据,php,blowfish,encryption-symmetric,Php,Blowfish,Encryption Symmetric,我正在尝试加密一个xml字符串,将其保存在某个地方,然后稍后解密(在cbc模式下使用blowfish) 当我解密字符串时,它会将前4个字符置乱 $text = "<?xml version="1.0" encoding="ISO-8859-1"?> ...."; $td = mcrypt_module_open('blowfish', '', 'cbc', ''); $iv = 'kd84h28v'; $ks = mcrypt_enc_get_key_size($td); $key

我正在尝试加密一个xml字符串,将其保存在某个地方,然后稍后解密(在cbc模式下使用blowfish)

当我解密字符串时,它会将前4个字符置乱

$text = "<?xml version="1.0" encoding="ISO-8859-1"?> ....";
$td = mcrypt_module_open('blowfish', '', 'cbc', '');
$iv = 'kd84h28v';
$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5('randomString1234'), 0, $ks);
mcrypt_generic_init($td, $key, $iv);
$cypher = mcrypt_generic($td, $text);
print mdecrypt_generic($td, $cypher);

# prints: çGÖºÌrsion="1.0" encoding="ISO-8859-1"?>
$text=“…”;
$td=mcrypt_模块_打开(‘河豚’、‘cbc’、’);
$iv='kd84h28v';
$ks=mcrypt_enc_get_key_size($td);
$key=substr(md5('randomString1234'),0,$ks);
mcrypt_generic_init($td,$key,$iv);
$cypher=mcrypt_generic($td,$text);
打印mdecrypt_通用($td,$cypher);
#印刷品:çGÖÌrsion=“1.0”encoding=“ISO-8859-1”?>
我将使用
ecb
模式,这可以很好地解密,但当前的php实现忽略了iv

你知道我做错了什么吗?

来自:

使用重新初始化加密缓冲区非常重要 在尝试解密数据之前,请执行mcrypt_generic_init()

所以你可能需要这样的东西:

mcrypt_generic_init($td, $key, $iv);
$cypher = mcrypt_generic($td, $text);
mcrypt_generic_deinit($td);
mcrypt_generic_init($td, $key, $iv);
print mdecrypt_generic($td, $cypher);

欧洲央行不支持IV,这不是实施细节。这就像说“我会骑摩托车,除非现在的本田车型没有四个轮子。”这很有效,谢谢。虽然我想知道为什么我不需要它来解密欧洲央行?我怀疑这与不同的填充方式有关,但我对mcrypt的内部结构了解不够,无法自信地说明这一点。