0

PHPスクリプトを使用して、最終的に250 mbになる可能性のあるファイルを変換する必要があります。それらは、ファイルの最初の 266 バイトに含まれるキーと説明を使用して、rc4 暗号化で暗号化されます。機能している暗号化機能があり、そのままにしておく必要があります。ここにあります:

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 暗号化では、解読するために穴「文字列」が必要なためですか? 私は間違ったことをしていますか?

ありがとうございました!

4

1 に答える 1

1

ファイルを読み取り、サイズがキーの長さの倍数であるバッファーを使用してルーチンにフィードする必要がありますrc4(たとえば、一度に 512、1024 バイトを読み取って渡すなど)。

そうしないと、キーと暗号化されたテキストが「整列」されず、結果としてゴミが発生します。

于 2014-02-10T17:18:13.147 に答える