2014-02-10 5 views
0

PHP 스크립트로 250MB까지 갈 수있는 파일을 변환해야합니다. 이들은 파일의 처음 266 바이트에 포함 된 설명과 키가있는 rc4 암호화로 암호화됩니다. 암호화 기능이 작동하고 그대로 유지해야합니다.라인별로 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 암호화에 해독 할 "string"구멍이 있어야합니까? 내가 잘못한 일을하고 있니?

감사합니다.

+0

왜 파일을 암호화하고 그 안에 키를 포함 시키시겠습니까? –

+0

그것은 내 개념이 아닙니다! 난 그냥 해독해야 해. 보안 목적이 아닙니다. – Philibobby

+1

운 좋게. 실제로 일반 텍스트보다 안전성이 떨어집니다. 실제로 당신이 안전하지 않을 때 안전하다고 믿게 만들 것입니다. –

답변

1

파일을 읽고 열쇠 크기의 배수 인 버퍼 (예 : 한 번에 512 바이트, 1024 바이트를 읽고 통과)를 사용하여 rc4 루틴으로 보내야합니다.

줄 단위로 정렬하지 않습니다. 그렇지 않으면 키와 암호화 된 텍스트가 정렬되지 않고 결과로 가비지가 생성됩니다.

+0

그리고 "$ line = fgets ($ fin, 1024);"를 추가하면됩니다. ? – Philibobby

+0

저는 PHP가 아니지만 예라고 대답 할 것입니다. 그것은 작동해야합니다. –

+0

여전히 작동하지 않습니다. 그것은 센스를 만들었습니다 – Philibobby