我有一个用于编码的函数,如下所示:
$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);
有没有人可以指出我应该在这里使用哪种密码术?提前谢谢。
答案 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);