1

我正在使用我制作的这个函数来加密数据:

function encryptCredential($data) {
$key = '9cqkTFHOfOmKn8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*AQOll%8tP18g35H!zNg9l85pgnww$&q6y@1WrWZhKhx&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*8PIh1zD@D5QKa98Gg';
$encryptedData = mcrypt_cbc(MCRYPT_TripleDES, substr($key,0,32), pad($data), MCRYPT_ENCRYPT, substr($key,32,16));
return base64_encode($encryptedData);
}

然后 PHP 给了我这个警告:

PHP Warning:  mcrypt_cbc() [<a href='function.mcrypt-cbc'>function.mcrypt-cbc</a>]: The IV parameter must be as long as the blocksize in /home/xxxxx/public_html/libraries/global.inc.php on line xx

我的钥匙是不是太长了?应该是多少个字符?

4

4 回答 4

1

当你发现它们时,你应该注意弃用警告。

也就是说,TripleDES的块大小为 8 个字节,但您为 IV 提供了 16 个字节。改变你substr($key,32,16)substr($key,32,8),它应该工作。

但我仍然建议迁移到新的 API。

于 2011-02-27T11:19:15.097 回答
1

块大小以及 IV 大小为 8 个字节。密钥大小 24 字节。

您可以使用mcrypt_get_iv_size和获取此信息mcrypt_get_key_size

在 CBC 模式下,IV 对于每个加密消息必须是唯一且不可预测的。用于mcrypt_create_iv(8)创建一个合适的。它不需要保密,因此可以与加密消息一起存储。

于 2011-02-27T11:39:55.680 回答
0

您正在使用的功能似乎已被贬低,请参阅http://se2.php.net/manual/en/function.mcrypt-cbc.php

此函数不应再使用,请参阅 mcrypt_generic() 和 mdecrypt_generic() 进行替换。

试试这些功能,看看你是否仍然得到错误

于 2011-02-27T10:55:59.467 回答
0

感谢所有的帮助。我稍后会修复 IV,但对于任何看到此页面并需要它们的人来说,这是我的新功能:

`//开始encryptCredential功能功能encryptCredential($数据){$键= '9cqkTFHOfOmKn8kt&NSlIK * XMRWWx * TNY $ azRdEvm2to * AQOll%8tP18g35H zNg9l85pgnww $&q6y @ 1WrWZhKhx&23acq ^ * FWF * xdnmI%7aWwM6JQLm%tzYG ^ * 8PIh1zD @ D5QKa98Gg!'; $cipher = mcrypt_module_open(MCRYPT_blowfish, '', 'cbc', ''); mcrypt_generic_init($cipher, substr($key,8,56), substr($key,32,8)); $encrypted = mcrypt_generic($cipher, pad($data)); mcrypt_generic_deinit($cipher); 返回 base64_encode($encrypted); } //结束 encryptCredential 函数

//开始decryptCredential function function decryptCredential($data) { $encryptedData = base64_decode($data); $key = '9cqkTFHOfOmKn8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*AQOll%8tP18g35H!zNg9l85pgnww$&q6y@1WrWZhKhx&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*8PIh1zD@D5QKa98g'; $cipher = mcrypt_module_open(MCRYPT_blowfish, '', 'cbc', ''); mcrypt_generic_init($cipher, substr($key,8,56), substr($key,32,8)); $decrypted = unpad(mdecrypt_generic($cipher, $encryptedData)); mcrypt_generic_deinit($cipher); 返回$解密;} //结束decryptCredential函数`

于 2011-02-28T11:48:19.240 回答