Kimmi: Farbabweichung nach Verschlüsselung mit Mcrypt

Heyho, ich schon wieder :)

nun habe ich folgendes Problem:

Ich möchte über Mcrypt Dateien verschlüsseln. Zum Testen und Verstehen habe ich ein Bild genommen.

Das funktioniert eigentlich auch ganz gut, bis auf dass es beim entschlüsselten Bild ganz minimale Farbabweichungen gibt. Alles ist ein ganz klein bisschen dunkler, wirklich nur ganz minimal und beim Bild kaum störend.

Aber es sollen ja am Ende Andere Dateien verschlüsselt werden und ich hab ein bisschen bammel, dass sich das bei anderen Dateien vllt stärker auswirkt.

Außerdem ist die entschlüsselte Datei etwas größer als das original undzwar genau so groß wie die verschlüsselte:

37107 Byte -> 37120 Byte

  
   	$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);  
   	$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);  
   	$key = "This is a very secret key";  
  
   	$text = file_get_contents('test.jpg');  
   	echo strlen($text) . "<br>";  
   	echo "<img src='test.jpg'><br><br>";  
  
   	$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);  
   	file_put_contents('test2.jpg', $crypttext);  
  
	echo strlen($crypttext) . "<br>";  
	echo "<img src='test2.jpg'><br><br>";  
	  
	$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);  
   	file_put_contents('test3.jpg', $decrypttext);  
  
	echo strlen($decrypttext) . "<br>";  
	echo "<img src='test3.jpg'><br><br>";

Offtopic:
Sorry, dass ich so viel Frage :D
Ich hab bisher immer nur so ganz kleine Dinge im Unterricht gemacht und nun will/soll/muss ich auf einmal ein ziemlich großes Projekt stemmen.

Ich versuch auch schon immer durch die Beispiele und so durchzusteigen und selbst auszuprobieren.

Aber ihr seid klasse :)

  1. Ok, das mit der Farbabweichung hat sich gerade erledigt...

    Die Bilder wurden übereinander angezeigt und die Farbe war durch den Blickwinkel anders.
    Wie dämlich...

    Bleibt aber das "Problem" mit der Dateigröße. Ist das schlimm oder ist das einfach nur "Datenmüll" zum Auffüllen auf die richtige Größe? Bekommt man das irgendwie weg?

    1. Bleibt aber das "Problem" mit der Dateigröße. Ist das schlimm oder ist das einfach nur "Datenmüll" zum Auffüllen auf die richtige Größe?

      Ja. Deshalb bin ich mir gar nicht sicher, ob das binär-sicher ist. Bei mcrypt habe ich der Doku nichts gefunden.

      $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);

      Bekommt man das irgendwie weg?

      Trimmen, Konkret rtrim(string, chr(0) wenn davon keine Nachteile zu erwarten sind:

      $decrypttext = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv), chr(0));

      Die etwas sichere Methode könnte es sein, wenn die Anzahl der Bytes der unverschlüsselten Daten bekannt ist, auf diese zu kürzen, hierbei wieder darauf achten "Text ist kein Binärkram" - Ich würde den in Text umwandeln.

      $text = base64_encode(file_get_contents('test.jpg'));  
      $text_length=strlen($text);  
      #...  
      $decrypt_text = substr(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv), 0, $text_length);  
      $decrypt_bin=base64_decode($decrypttext);
      

      .... Das sollte dann auch binär-sicher sein.

      Freilich geht dann auch:

      $text = base64_encode(file_get_contents('test.jpg'));  
      $crypt_text=mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);  
      #...  
      $decrypt_bin = base64_decode(ltrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv), 0, $text_length),chr(0));
      

      Jörg Reinholz

      1. Freilich geht dann auch:

        Nein, das geht freilich nicht. Das bedarf einer Korrektur:

        $text = base64_encode(file_get_contents('test.jpg'));

        $crypt_text=mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
        #...
        $decrypt_bin = base64_decode(ltrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv)),chr(0));

          
        Jetzt kann das stimmen.  
          
        [Jörg Reinholz](http://www.fastix.org)