弱密码(破解算法)错误

时间:2016-11-15 16:02:47

标签: php algorithm cryptography

我有一个用于编码的函数,如下所示:

$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);

但事实是,当我为了PCI而运行PHP RIPS扫描程序时,我在以下行中收到错误消息:弱密码学(破解算法)

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

有没有人可以指出我应该在这里使用哪种密码术?提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

确保密钥的大小正确,长度为16,24或32字节,其他功能将拒绝密钥或填充密码,没有密钥填充标准。

不要使用ECB模式,这是不安全的,请参阅ECB mode,向下滚动到企鹅。而是使用带有随机IV的CBC模式,只需将加密数据与IV前缀用于解密。

mcrypt不支持PKCS#7填充,只支持甚至无法与二进制数据一起使用的非标准空填充。

答案 1 :(得分:0)

这最终解决了这个问题:

将密钥长度从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);