关于RC4解密PHP(mcrypt)

时间:2016-10-19 11:15:08

标签: php

我正在寻找有关RC4 Decryption的任何内容,并使用以下方法解码输入:Hexa

幸运的是,我找到了 PHP's mcrypt_encrypt

我想用相同的密钥解密许多密码文件。 但是,我遇到了一个问题:

$iv_size = mcrypt_get_iv_size(MCRYPT_ARCFOUR, MCRYPT_MODE_STREAM); 
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
print (mcrypt_decrypt(MCRYPT_ARCFOUR, $key, $text, MCRYPT_MODE_STREAM, $iv));

(和UTF-8越南语)

echo $iv_size的结果是0

请帮助我,我不知道如何解决它?

  

密钥:Lyr1cjust4nct(密钥文件.txt)

     

模式:STREAM

     

使用:Hexa

解码输入      

密文:cipher.txt(Hexa)

     

http://pastebin.com/bmYcmU0J

1 个答案:

答案 0 :(得分:1)

RC4不支持IV。您需要为每条消息使用唯一的密钥。

RC4有两大弱点适用于您的情况:

  • 使用相关密钥并不安全。因此,您无法将固定密钥与变量/唯一IV连接起来。您需要使用某种散列方案。
  • 输出的开头非常偏向于泄漏有关密文的信息。所以你需要扔掉密钥流的开头。我认为丢掉1024字节应该可以解决最大的偏见。

RC4不包含任何完整性保护(MAC)。因此,如果攻击者操纵密文,您就会遇到问题。

=> 不要使用RC4。在经过身份验证的模式(如GCM)中使用AES,或者使用加密然后MAC原则将AES与MAC结合使用。

我强烈建议使用由专家编写的高级库,因为人们经常会出现加密错误,即使使用AES等标准基元也是如此。