弱加密(破算法)错误


Weak Cryptography (broken algorithm) error

我有一个用于编码的函数,就像这样:

$skey = "whateveryoulike"; // you can change it
if(!$value){return false;}
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $skey, $text, MCRYPT_MODE_ECB, $iv);

,但事情是,当我运行PHP RIPS扫描器为PCI的缘故,我得到一个错误在下面一行说:弱加密(破算法)

--> $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $skey, $text, MCRYPT_MODE_ECB, $iv);

有没有人可以告诉我我应该在这里使用哪种密码术?

MCRYPT_RIJNDAEL_256不是AES,它是Rijndael,块大小为256位,而不是密钥大小为256位。最好使用AES,它的块大小为128位,即RIJNDAEL_128。

确保密钥的大小是正确的,长度为16,24或32字节,否则函数将拒绝密钥或填充一些东西,没有密钥填充的标准。

不要使用ECB模式,这是不安全的,见ECB模式,向下滚动到企鹅。相反,使用CBC模式与随机IV,只需在加密数据的前缀与IV用于解密。

mcrypt不支持pkcs# 7填充,只有非标准的空填充,甚至不能用于二进制数据。

问题终于解决了:

将密钥长度从15增加到16,因为它必须是16、24或32

$skey = "whateveryoulike";

$skey = "whateveryoulikek";

然后:

来自:

$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $skey, $text, MCRYPT_MODE_ECB, $iv);

:

$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $skey, $text, MCRYPT_MODE_CFB, $iv);