2016-06-28 15 views
1

Ich habe ein kleines Problem, wo ich "openssl_encrypt" verwenden, um eine Zeichenfolge mit HTML zu verschlüsseln, diese Zeichenfolge in eine Datei schreiben und dann in einem separate Seite, entschlüssle ich die gesamte Datei mit "openssl_decrypt". Ich habe dafür gesorgt, den gleichen Verschlüsselungsschlüssel, die gleiche Methode und den gleichen iv zu verwenden. Ich stelle mir vor, das ist etwas, das ich als Neuling für Verschlüsselung nicht sehen kann. Vielen Dank im Voraus für jede Hilfe! HierVerschlüsseln Zeichenfolgen in Datei schreiben und entschlüsseln Datei in PHP

ist einige Beispiel-Code:

//An example of the string 
$string = "<div class='mod'><div><span class='datetimestamp'>On 06/28/2016 at 04:32:09 PM, ** modified a record with id of \"5\" in the \"results\" table:</span><br><span class='record-label'>Prev Record:</span>jobnumber='none', dropdate='07/06/2016', eventdate='07/16/2016', dealership='ABC Nissan', pieces='3700', datatype='DB', letter='t'"; 

//The encryption 
$encrypt = openssl_encrypt($string, 'AES-256-XTS', '93jkak3rzp72', 1, '45gh354687ls0349'); 
$file = fopen("logs/2016-06-28.log", 'a'); 
fwrite($file, $encrypt); 
fclose($file); 


//The decryption - DONE IN A SEPARATE PAGE 
$file = @fopen("logs/2016-06-28.log", "r"); 
if ($file) { 
    while (($data = fgets($file)) !== false) { 
     $decrypt .= openssl_decrypt($data, 'AES-256-XTS', '93jkak3rzp72', 1, '45gh354687ls0349'); 
    } 
} 
+0

Funktioniert für mich. füge 'echo $ decrypt;' hinzu und prüfe, ob du 'logs/2016-06-28.log' schreiben/schreiben kannst –

+0

Wenn du nur eine Datei verschlüsselst XTS ist nicht der beste Verschlüsselungsmodus, CBC wird häufiger verwendet. XTS ist für Sektor-für-Sektor-Festplattenverschlüsselung ausgelegt. – zaph

+0

E_p, die Verschlüsselung und Entschlüsselung erfolgen auf separaten Seiten. Und die Dateien werden geschrieben und gelesen, gut. –

Antwort

2

Vielleicht ist das Problem, dass Sie versuchen, zusätzliche verschlüsselte Daten anzuhängen, die aus mehreren Gründen im Allgemeinen nicht funktioniert, eine wichtige ist, dass AES blockbasiert ist und höchstwahrscheinlich Padding sein wird. Viele Modi verwenden eine Art der Verkettung und dies scheitert auch beim Anhängen verschlüsselter Daten.

Sie öffnen die Datei, an die Sie schreiben, im Append-Modus. Dies ist nicht das, was Sie benötigen, sondern verwenden Sie den Schreibmodus w. Dies führt dazu, dass jede Verschlüsselung an die vorherigen Daten angehängt wird und der Grund, warum die erste Verknüpfung funktioniert, aber nachfolgende Zeiten. Wenn Sie die Dateilänge nach jeder Verschlüsselung untersuchen, wird es offensichtlich sein, was passiert.

Sie müssen verwenden:

$file = fopen("logs/2016-06-28.log", 'w'); 

Vom php fopen docs:

'w' Nur zum Schreiben öffnen; Platzieren Sie den Dateizeiger am Anfang der Datei und schneiden Sie die Datei auf Null Länge. Wenn die Datei nicht existiert, versuchen Sie, sie zu erstellen.

'a' Nur zum Schreiben geöffnet; Platzieren Sie den Dateizeiger am Ende der Datei. Wenn die Datei nicht existiert, versuchen Sie, sie zu erstellen. In diesem Modus hat fseek() keine Auswirkung, Schreibvorgänge werden immer angehängt.

+0

Dadurch wird nur ein Protokolleintrag in der Datei gespeichert, da bei jedem Öffnen der Datei die Datei abgeschnitten wird. Solange du nur den letzten Eintrag sehen willst, wird das funktionieren. – Pitchinnate

+0

Danke! Das hat mich auf den richtigen Weg gebracht! :) –

2

ich nicht fgets() verwenden würde, da es nur eine einzige Zeile aus einer Datei zu einem Zeitpunkt erhält, und Sie können keine verschlüsselte Zeichenfolge aufgeteilt und einzelne Stücke entschlüsseln zu einer Zeit.

Sie könnten fgets() verwenden, aber Sie müssen alles einlesen und speichern Sie es in einer Variablen und dann, nachdem Sie alles entschlüsseln.

Oder Sie können einfach etwas wie file_get_contents() verwenden, um den gesamten Inhalt der Datei zu erhalten und dann zu entschlüsseln.

+0

Vielen Dank für Ihre Antwort! Ich habe ursprünglich versucht, 'file_get_contents()' zu verwenden, aber die Entschlüsselung schlägt immer noch fehl. Die Entschlüsselung läuft perfekt auf der ersten Zeichenfolge ab, die in die Datei geschrieben wird, aber bei jeder Zeichenfolge, die anschließend in die Datei geschrieben wird, schlägt die Entschlüsselung fehl und verschiedene Symbole werden angezeigt. –

+1

Das ist, weil Sie das nicht tun können. Sie können nicht mehr Daten an eine verschlüsselte Datei anhängen und sie auf einmal entschlüsseln. Wenn Sie das tun möchten, ja, dann müssen Sie es Zeile für Zeile lesen und jede einzelne Zeile einzeln entschlüsseln. Wenn Sie in der Zeichenfolge jedoch einen Zeilenumbruch haben, wird in Ihrer Datei ein Zeilenumbruch auftreten. Sie benötigen also einen anderen Weg als Zeilenumbrüche, um einzelne Einträge in der Datei unterscheiden zu können. – Pitchinnate