Ankündigung

Einklappen
Keine Ankündigung bisher.

Schnelle symetrische Verschlüsselung

Einklappen

Neue Werbung 2019

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

  • Schnelle symetrische Verschlüsselung

    Hallo Leute,

    ich bin dabei eine symmetrische Verschlüsselung mit den php-eigenen Funktionen zu erstellen. Mein bisheriger Code für die Verschlüsselung:

    PHP-Code:
            $td mcrypt_module_open(MCRYPT_DES''MCRYPT_MODE_ECB'');
            
    $iv mcrypt_create_iv(8MCRYPT_DEV_RANDOM);
            
    $key substr(md5(Config::GetValue("SymmetricKey")),5,8);
            
    $key substr(md5(Config::GetValue("SymmetricKey")),5,8);
            
    mcrypt_generic_init($td$key$iv);
            
    $encrypted mcrypt_generic($td$plainText);
            
    mcrypt_generic_deinit($td); 
    die Entschlüsselung analog dazu nur eben mdecrypt_generic.
    Nur dauert diese Art der Verschlüsselung extrem lange. Für ein plainText mit ca 10 Zeichen braucht der Vorgang mehrere Sekunden.

    Was für Algorithmen gibt es, die schneller verschlüsseln/entschlüsseln? Ich finde in der Doku keine Auflistung etc.

    Gruß, Zender

  • #2
    bei mir dauert das unter 0,03 sekunden, deswegen kann ich da nur vermuten, das etwas anderes bei dir schiefläuft. propier den code mal ohne dein projekt im hintergrund:

    PHP-Code:
    <?php
       
    /* Open the cipher */
       
    $td mcrypt_module_open('rijndael-256',  '',  'ofb',  '');

       
    /*  Create the IV and determine the keysize length, use MCRYPT_RAND
        * on  Windows instead */
       
    $iv mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
       
    $ks  mcrypt_enc_get_key_size($td);

       
    /*  Create key */
       
    $key substr(md5('very secret  key'), 0$ks);

        
    /* Intialize encryption */
        
    mcrypt_generic_init($td$key$iv);

       
    /*  Encrypt data */
       
    $encrypted  mcrypt_generic($td'This is very  important data');

       
    /* Terminate encryption handler */
       
    mcrypt_generic_deinit($td);

       
    /*  Initialize encryption module for decryption */
       
    mcrypt_generic_init($td$key$iv);

       
    /*  Decrypt encrypted string */
       
    $decrypted  mdecrypt_generic($td$encrypted);

        
    /* Terminate decryption handle and close  module */
       
    mcrypt_generic_deinit($td);
       
    mcrypt_module_close($td);

       
    /* Show  string */
       
    echo trim($decrypted) .  "\n";
    ?>
    p.s.: DES wird nicht mehr als sicher angesehen, nimm rijndal (AES), blowfish oder twofish. und das der schlüssel nicht sicher ist, muss ich dir ja nicht sagen, oder
    [B]PHP4?!?[/B]>>>[B]Aktuelle[/B] PHP Version: [B]5.2.11 || 5.3.0
    [URL="http://en.opensuse.org/Factory/News"]Suse 11.2 *vorfreude*[/URL]
    [/B]

    Kommentar


    • #3
      ok, danke für deinen Beitrag. Es scheint tatsächlich an der Konfiguration des Servers zu liegen, auch dein geposteter Original-Code brauchgt bei mir sehr lange (> 2 min, gibt aber das korrekte Ergebnis aus). Kann es sein, dass spezielle Module schon vorher geladen sein müssen, oder was kann diese kleinen Operationen so sehr verzögern?

      Kommentar


      • #4
        wie schauts aus mit dem php time_limit ? ist dies kleiner als 2 minuten? wenn ja, würde ich tippen, das das mcrypt modul spinnt.

        kannst du den obigen testcode mal zeilenweise von oben nach unten auskommentieren um zu sehen obs ein problem mit einer bestimmten funktion gibt?
        [B]PHP4?!?[/B]>>>[B]Aktuelle[/B] PHP Version: [B]5.2.11 || 5.3.0
        [URL="http://en.opensuse.org/Factory/News"]Suse 11.2 *vorfreude*[/URL]
        [/B]

        Kommentar


        • #5
          Zitat von brian johnson Beitrag anzeigen
          wie schauts aus mit dem php time_limit ? ist dies kleiner als 2 minuten? wenn ja, würde ich tippen, das das mcrypt modul spinnt.

          kannst du den obigen testcode mal zeilenweise von oben nach unten auskommentieren um zu sehen obs ein problem mit einer bestimmten funktion gibt?
          Das Problem liegt in dieser Zeile
          PHP-Code:
          $iv mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM); 
          Diese Funktion braucht extrem lange zur Ausführung. Die Zeit überschreitet auch den per set_time_liimit gesetzten Wert, ohne das es zu einer Exception kommt.

          Wodurch kann das begründet sein?

          Kommentar


          • #6
            Du setzt aber nicht zufällig Windows ein und hast
            PHP-Code:
             /*  Create the IV and determine the keysize length, use MCRYPT_RAND
                * on  Windows instead */ 
            weil /dev/random wird man unter windows überlicherweise nicht vorfinden
            überlesen ?
            [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
            | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

            Kommentar


            • #7
              Zitat von robo47 Beitrag anzeigen
              Du setzt aber nicht zufällig Windows ein und hast
              PHP-Code:
               /*  Create the IV and determine the keysize length, use MCRYPT_RAND
                  * on  Windows instead */ 
              weil /dev/random wird man unter windows überlicherweise nicht vorfinden
              überlesen ?
              nein, das ganze läuft auf einem Linux-BS

              EDIT: Es lag tatsächlich an MCRYPT_DEV_RANDOM, wenn ich MCRYPT_RAND verwende, klappt es gut.

              Kommentar


              • #8
                Hm, ich bekomme allerdings Probleme bei der Encodierung/Dekodierung wenn ich ein anderes Modul als DES nutze:

                mit
                PHP-Code:
                $td mcrypt_module_open(MCRYPT_DES''MCRYPT_MODE_ECB''); 
                bekomme ich ein richtiges Ergebnis bei der Dekodierung.

                mit
                PHP-Code:
                 $td mcrypt_module_open('twofish''''cbc'''); 
                allerdings nicht, das entschlüsselte Wort besteht dann nur noch aus Symbolzeichen, obwohl alle anderen Schritte exakt gleich geblieben sind...

                Kommentar

                Lädt...
                X