【问题标题】:RC4 decryption line by lineRC4逐行解密
【发布时间】:2014-02-10 17:04:53
【问题描述】:

我必须使用 php 脚本转换一些最终可能达到 250 mb 的文件。它们使用 rc4 加密进行加密,其中包含文件前 266 个字节中包含的密钥和描述。我有一个正在工作的加密功能,我必须保持原样。这里是:

function rc4($key, $str) {
    $s = array();
    for ($i = 0; $i < 256; $i++) {
        $s[$i] = $i;
    }

    $j = 0;

    for ($i = 0; $i < 256; $i++) {
        $j = ($j + $s[$i] + ord($key[$i % strlen($key)])) % 256;
        $x = $s[$i];
        $s[$i] = $s[$j];
        $s[$j] = $x;
    }

    $i = 0;
    $j = 0;
    $res = '';

    for ($y = 0; $y < strlen($str); $y++) {
        $i = ($i + 1) % 256;
        $j = ($j + $s[$i]) % 256;
        $x = $s[$i];
        $s[$i] = $s[$j];
        $s[$j] = $x;
        $res .= $str[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);
    }

    return $res;
}

我的文件读取/解密代码在这里:

$fin = fopen("input.txt", "rb");
$fout = fopen("output.txt", "wb");

$contents = fgets($fin,10);
$mykey = fgets($fin,256);

if($contents =="dump"){
    while(!feof($fin))
    {
        $line = fgets($fin);
        fwrite($fout, rc4($mykey, $line));
    }
    fclose($fin);
    fclose($fout);      
}

以前,代码接受一些小文件,并通过读取其中的孔内容并将其传递给 rc4 函数来转换它们......现在代码需要处理一些更大的文件,我必须这样做一行一行。

生成的文件已损坏...是不是因为 rc4 加密需要“字符串”漏洞才能解密?我做错了什么吗?

谢谢!

【问题讨论】:

  • 为什么要加密文件并将密钥嵌入其中?
  • 这不是我的想法!我只需要解密它。这不是出于安全目的。
  • 幸运。它甚至比明文更不安全,因为它会让你相信你是安全的,而事实上你并不......
  • 它不是为了安全而设计的……它是一种在应用程序中读取的格式……

标签: php fgets rc4-cipher


【解决方案1】:

您需要读取文件并将其提供给rc4 例程,使用大小为密钥长度倍数的缓冲区(例如,一次读取并传递 512、1024 个字节等)。

不能逐行,否则密钥和密文没有“对齐”,结果会是垃圾。

【讨论】:

  • 我得到了一个更新,在特定行的末尾有一些换行符... fgets 将在断行处停止它的选择... 我似乎看不出如何解决这个问题...
  • 我用 fread 做了同样的事情...现在大小合适了,但还是不行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多