Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用函数mcrypt_cbc()在PHP中获取错误_Php_Encryption_Mcrypt - Fatal编程技术网

使用函数mcrypt_cbc()在PHP中获取错误

使用函数mcrypt_cbc()在PHP中获取错误,php,encryption,mcrypt,Php,Encryption,Mcrypt,我使用我制作的此函数加密数据: 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_

我使用我制作的此函数加密数据:

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
PHP警告:mcrypt_cbc()[]:IV参数必须与第xx行/home/xxxxx/public_html/libraries/global.inc.PHP中的blocksize一样长

我的钥匙太长了吗?它应该有多少个字符?

您正在使用的函数似乎已磨损,请参阅

此函数不应再使用,请参见mcrypt_generic()和mdecrypt_generic()以获取替换


请尝试这些函数,看看是否仍然出现错误

当您发现这些函数时,应注意弃用警告

这就是说,的块大小是8字节,但您为IV提供了16字节。将
substr($key,32,16)
更改为
substr($key,32,8)
,它应该可以工作


但是我仍然建议使用新的API。

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

您可以使用
mcrypt\u get\u iv\u size
mcrypt\u get\u key\u size
获取此信息


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

谢谢您的帮助。我将在稍后修复IV,但以下是我的新功能,供任何看到此页面并需要它们的人使用:

`//启动加密凭证功能 函数加密凭据($data){ $key='9cqktfhofomkon8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*acoll%8tP18g35H!zNg9l85pgnww$&q6y@1WrWZhKhx&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*8PIh1zD@D5QKa98Gg'; $cipher=mcrypt_模块_打开(mcrypt_河豚,“,”cbc“,”; mcrypt_generic_init($cipher,substr($key,8,56),substr($key,32,8)); $encrypted=mcrypt_generic($cipher,pad($data)); mcrypt_generic_deinit($cipher); 返回base64_编码($encrypted); } //结束加密凭证功能

//启动凭证功能 函数解密凭据($data){ $encryptedData=base64_解码($data); $key='9cqktfhofomkon8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*acoll%8tP18g35H!zNg9l85pgnww$&q6y@1WrWZhKhx&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*8PIh1zD@D5QKa98Gg'; $cipher=mcrypt_模块_打开(mcrypt_河豚,“,”cbc“,”; mcrypt_generic_init($cipher,substr($key,8,56),substr($key,32,8)); $decrypted=unpad(mdecrypt_generic($cipher,$encryptedData)); mcrypt_generic_deinit($cipher); 返回$decrypted; }
//end decryptCredential函数`

//start pad unpad函数pad($text){//添加一个0x80字节,让PHP填充0x00字节。return pack(“a*H2”,$text,“80”);//return$text;}函数unpad($text){//从已删除0x00字节的文本返回子字符串(rtrim($text,“\0”),返回除尾部0x80以外的所有字符,0,-1);//return trim($text);}//end pad unpad函数
来自:“此函数不应再使用,请参见mcrypt_generic()和mdecrypt_generic(),以进行替换。”下面是具有iv和键大小的模块列表:cast-128,iv:8,键:16 gost,iv:8,键:32 rijndael-128,iv:16,键:32 twofish,iv:16,键:32 arcfour,iv:,密钥:cast-256,iv:16,密钥:32 loki97,iv:16,密钥:32 rijndael-192,iv:24,密钥:32 saferplus,iv:16,密钥:32 wake,iv:,密钥:河豚compat,iv:8,密钥:56 des,iv:8,密钥:8 rijndael-256,iv:32,密钥:32蛇,iv:16,密钥:32 xtea,iv:8,密钥:16河豚,密钥:8,密钥:56 enigma,iv:,密钥:rc2,iv:8,密钥:128,密钥:24,密钥:三元组