首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RC4逐行解密

RC4逐行解密
EN

Stack Overflow用户
提问于 2014-02-10 17:04:53
回答 1查看 2.7K关注 0票数 0

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

代码语言:javascript
复制
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;
}

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

代码语言:javascript
复制
$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加密需要解密漏洞“字符串”吗?我是不是做错了什么事?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-10 17:18:13

您需要使用大小为键长度的倍数的缓冲区(例如,每次读取并传递512、1024字节等)将文件读入rc4例程。

不是一行行,否则密钥和加密的文本没有“对齐”,结果将是垃圾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21683468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档