Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP und AES256

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Hier ein daily update:

    aus der passphrase wird 256Bit Key und 128Bit IV erzeugt:
    PHP-Code:
    <?php
     $orgdata
    ="ENP/jqOoKhOrQQRIFD5F5g==";
     
    $pass "12345678901234567890123456789012";
     
    $data base64_decode($orgdata); 
     
     
    $keysha hash("sha384"$pass); 
     
    $schluessel substr($keysha,0,64);                     // 32 Byte für den Key
     
    $initv substr($keysha,64);                      // 16 Byte für den IV

     
    $plain mcrypt_decrypt (MCRYPT_RIJNDAEL_128,pack("H*",$schluessel), 
                            
    $dataMCRYPT_MODE_CBC
                            
    pack("H*",$initv));
     echo 
    $plain;
    ?>
    folgender Befehl erzeugt $orgdata:
    Code:
    echo "1234567890" | openssl enc -base64 -e -p -aes-256-cbc -pass pass:"12345678901234567890123456789012" -md sha384 -nosalt
    hab für die Key und IV Erzeugung auf SHA384 umgestellt. Das hat den Charm, das genau 48 Bytes bei raus kommen, egal wie kurz/lang die Passphrase ist. Außerdem ist er sicherer als MD5.

    Nur wie openssl jetzt da noch das Salz einbaut, will sich mir den ganzen Tag einfach nicht erschließen.
    Hat wer ne Ahnung, was da gemacht wird?
    Bugs

    Kommentar


    • #17
      wieso dein vector keine random data mehr enthält, erschliesst sich mir nicht;

      macht nichts, shau mal hier:
      https://github.com/chuyskywalker/phpaes

      Kommentar


      • #18
        Für die Nachwelt hier mal meine Lösung:
        PHP-Code:
        <?php

        //DECRYPT openSSL AES-256-CBC, SHA384 Keyhashing  and base64
         
        $orgdata=$_POST[data]; 
         
        $pass "123456781234567812345678";
         
        $data base64_decode($orgdata);  // wird zu "Salted__xY... (x = 8Byte binary salt , Y... = encoded Data
         
        $salt substr($data,8,8);           // salt holen                                            
         
        $encodedData substr($data,16);  // zu entschlüsselnde daten
         
        $keyhashed hash("sha384",$pass.$salt); // keyhash aus key und salt erzeugen, openSSL macht nur einen Durchlauf :-(
         
        $key pack("H*",substr($keyhashed,0,64)); // die ersten 32 Byte sind Key
         
        $iv  pack("H*",substr($keyhashed,64,96)); // die folgenden 16 Byte sind IV
         
         
        $pt mcrypt_decrypt (MCRYPT_RIJNDAEL_128,$key ,$encodedDataMCRYPT_MODE_CBC$iv);
         
        $pt substr($pt,0, -ord($pt[strlen($pt)-1]));  // Padding entfernen

        // ENCRYPT AES-256-CBC, SHA384 Keyhashing and base64 for openSSL 
         
        $plaintext "1234567812345678";        // zum Verschlüsseln
         
        $padbyte 16 - (strlen($plaintext) % 16);                
         
        $plaintext .= str_repeat(chr($padbyte),$padbyte);        // Padding hinzufügen        
         
        $salt mcrypt_create_iv(8MCRYPT_RAND);    // 8Byte zufällen SALT erzeugen
         
        $keyhashed hash("sha384",$pass.$salt); // keyhash aus key und salt erzeugen, openSSL macht nur einen Durchlauf :-(
         
        $key pack("H*",substr($keyhashed,0,64));  // die ersten 32 Byte sind Key
         
        $iv  pack("H*",substr($keyhashed,64,96));  // die folgenden 16 Byte sind IV
         
        $cp base64_encode("Salted__".$salt.mcrypt_encrypt (MCRYPT_RIJNDAEL_128,$key ,$plaintextMCRYPT_MODE_CBC$iv));

        ?>
        Für Fragen oder Änderungswünsche ( z.B. Kommentierung etc.) einfach melden.

        Bugs

        Kommentar

        Lädt...
        X