我使用mcrypt_encryp
t函数,它返回空值。
我的代码是:
$secret = 'der102rtv1';
$data = '24000441;82;100';
$key = base64_decode($secret);
$blockSize = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($data);
$pad = $blockSize - ($len % $blockSize);
$data .= str_repeat(chr($pad), $pad);
$encrypt = base64_encode(mcrypt_encrypt('tripledes', $key, $data, 'ecb'));
PHP Version 5.6.33并且此代码返回空是什么问题?
更新: 我有这个错误: 警告:mcrypt_encrypt():此算法不支持大小为7的密钥。仅支持24小时的键
答案 0 :(得分:0)
您的代码未返回为空,它返回bool(false)
。按the docs表示失败。
根据维基百科,Triple DES算法支持三个key options(强调我的):
键入选项1
所有三个键都是独立的。有时称为3TDEA或三倍长度键
这是最强的,具有3×56 = 168个独立密钥位。它仍然容易遭遇中间攻击,但攻击需要22×56步。
键入选项2
K1和K2是独立的,K3 = K1。有时称为2TDEA或双倍长度键
这提供了112位密钥的较短密钥长度以及DES和密钥选项1之间的合理折衷,同样的警告如上所述。[15]这是对“双DES”的改进,只需要256步攻击。 NIST已弃用此选项。
键入选项3
所有三个键都是相同的,即K1 = K2 = K3
这与DES向后兼容,因为两个操作被取消。 ISO / IEC 18033-3从未允许此选项,NIST不再允许。
每个DES密钥是8个奇校验字节,具有56位密钥和8位错误检测。 密钥包需要24个字节用于选项1 ,16个用于选项2,或8个用于选项3。
错误消息要求24个字节的密钥,唯一不需要弃用的选项是唯一需要24个字节的选项。这表明mcrypt不支持NIST弃用的键控选项。但是没有一个选项支持7字节的密钥包大小,因此有点不清楚你想要在第一时间完成什么:
如果您想模仿某些第三方应用程序或技术的加密方法以解密已加密的数据,则需要收集有关所使用的确切算法和参数的更多信息。
如果您只是想为自己的消费加密新数据,您可能想尝试一个未被放弃的库,并可能切换到没有已知漏洞的算法。 PHP中最先进的加密库是Sodium,自PHP / 7.2起可用,但OpenSSL也是自PHP / 5.3以来可用的一个很好的替代方案
...或者只是尝试更长的密钥。
答案 1 :(得分:-1)
mcrypt_encrypt
函数的第一个参数应该是MCRYPT_
常量之一,所以也许这就是你的问题。
请查看手册:http://php.net/manual/es/function.mcrypt-encrypt.php