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

  • PHP und AES256

    Hallo zusammen!
    Ich versuche grad ( seit einer Woche ) von einem Router ( OpenWRT ) Verbindung zu meiner Webseite herzustellen.
    Dafür nutze ich auf Routerseite LUA. Das klappt soweit schon ganz gut, nur wollt ich jetzt noch die Daten verschlüsseln. Dafür verwende ich auf LUA_Seite aeslua und enc alles mit AES256 und dann Base64 zur Website.
    Nur iwie kommt im php nicht das erwartete wieder raus. Hab über Google gefunden, das phpAES über mcrypt AES anders zu behandeln ist! Aber auch BeispielCode mit RIJ...128 liefert nur Müll .
    Kennt wer das Problem und weiß vllt, was ich vergessen hab?

    MfG Bugs


  • #2
    Keine Ahnung wo dein Problem wirklich liegt. Stimmt der Schlüssel, der Cipher, der übermittelte Text?

    Etwas unpräziser darfst du also schon noch werden (Guten Morgen Ironie).
    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

    Kommentar


    • #3
      openwrt kommt auch mit ner shell zurecht:
      openssl oder wget ?
      könnte dir da auch helfen. sonst viel spass beim debuggen.

      Kommentar


      • #4
        Hi und sry, Post war gestern fix vom Handy.
        Hier mal etwas Code:
        LUA:
        Code:
        require("aeslua")                  -- für aeslua.encrypt()
        mimi = require("mime")        -- für base64enc()
        
        aes256key="1234567812345678"
        iv = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        testdata = 1234567890
        
        aesString = aeslua.encrypt(aes256key, testdata,AES256)  -- CBC ist default
        base64AEString = base64enc(aes256key)
        
        request_body = "data="..base64AESString    -- request_body geht mit HTTP POST an die Webseite
        PHP:
        PHP-Code:
        $key128 "1234567812345678";
        $iv "0000000000000000";

        $cipher mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc','');
        $testdata base64_decode($_POST[data]);

        mcrypt_generic_init($cipher$key128 $iv);
        $decrypted mdecrypt_generic($cipher,$testdata);
        mcrypt_generic_deinit($cipher);

        echo 
        "decrypted: " substr($decrypted0$length); 
        openssl hätt ich in LUA genommen, aber dann wird das Image zu groß und passt nicht mehr in die 4MiB Flash :-S

        Grüße Bugs

        Kommentar


        • #5
          Beginne in der Mitte beim Debuggen, ist der gesendete base64-Code der gleiche wie der Empfangene? Wenn ja, ist das vor dem base64 encode gleich dem base64 decode?
          GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

          Kommentar


          • #6
            Jup die base64 de/encodierung ist bei beiden gleich.
            Hab jetzt mal n paar Sachen raus geschmissen und luasec ( nutzt wohl die OpenSSL lib ) rein genommen.
            Und hoffe, das es rein passt. Aber so wie ich das auf den ersten Blick sehe stellt mir die nur die ssl Geschichten von OpenSSL zur Verfügung. Naja wenn ich den Apache mit ssl auf Port 80 umgebogen krieg sollt es auch reichen Ansonsten OpenSSL-utils und dann über die shell.

            Kommentar


            • #7
              nimmste 128 und 246 keylänge, oder heissen die nur so?

              //OT:
              Zitat von Bugs Beitrag anzeigen
              openssl hätt ich in LUA genommen, aber dann wird das Image zu groß und passt nicht mehr in die 4MiB Flash :-S
              hm, 790kb ist dann natürlich zu gross, kannste das nicht auf nen stick hauen?
              hab die lezte zeit viel mit freetz rumgespielt, und hab usbRoot und external-package lieben gelernt.

              Kommentar


              • #8
                du verschlüsselst auf 256 bit, entschlüsselst aber auf 128 bit..
                [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                Kommentar


                • #9
                  So wieder da
                  Verschlüsselt wird mit 256Bit Key auf 128Bit Blöcken (AES256) und was ich gelesen habe muss das mit mcrypt 128 mitn 256Bit Key entschlüsselt werden.

                  Gesendete Base64 Daten kommen nun auch richtig an, musste noch n bissl "escapen"

                  OpenSSL hab ich nun doch noch in die 4MiB Flash gequetscht ( wer braucht schon IPv6 ?)
                  Steuern von LUA aus geht auch schon, aber weiter geht's nicht.

                  Wie bekomm ich das jetzt auf PHP Seite wieder entschlüsselt?
                  Mache als erstes base64_decode und dann "cutte" ich mir das salt und die Nztzdaten aus dem Ergebniss. Und nun? Muss ich den iv von OpenSSL auch noch mit übertragen oder rechnet mcrypt sich den selbst zurecht? Hab iwo gelesen, das OpenSSL aus key, hash und salt sich den ausrechnet, macht mcrypt das auch selbst? Weil mcrypt_decode() nimmt keinen salt entgegen...
                  Fragen über Fragen und Grüße
                  Bugs

                  Kommentar


                  • #10
                    wie du encryptest weiss ich nicht, das suchste sicher auch nicht:
                    http://php.net/manual/de/function.openssl-decrypt.php
                    ich schau es mir morgen mal an...

                    Kommentar


                    • #11
                      encrypten in LUA mach ich so:
                      Code:
                      function encodeStream(data,aesCode,iv,salt)
                      	local shellfp = io.popen('echo "'..data..'" | openssl enc -base64 -e -aes-256-cbc -salt  -pass pass:'..aesCode)
                      	local ret=shellfp:read("*a")
                      	io.close(fp)
                      	return ret
                      end
                      und mein DecodeVersuch in PHP so:
                      PHP-Code:
                      <?php
                       $data
                      ="U2FsdGVkX18KC3K2wq/ku7isZLLxhh+VOnZrpa3rmYU="// enc und base64 von LUA mit openSSL wird später dann im $_POST[data] stehen
                       
                      $pass "123456781234567812345678";
                       
                      $data base64_decode($data);
                       
                      $salt substr($data88);
                       
                      $ct substr($data16);

                       
                      $key md5($pass $salttrue);
                       
                      $iv md5($key $pass $salttrue);
                       
                      $pt mcrypt_decrypt (MCRYPT_RIJNDAEL_128$key$ct
                                                
                      MCRYPT_MODE_CBC$iv);

                       echo 
                      $pt;
                      ?>
                      Dabei erwarte ich als Output "1234567891", aber kommt nur Müll bei raus

                      Bugs

                      Kommentar


                      • #12
                        Code:
                         dm2CLLAh2LY8N/9pgR3VWyneg9uPFmAcgP9Kb1EqELo=
                        heisst mein string gecrypted. damit klappt auch beim entschlüsseln; führendes leerzeichen nicht vergessen ?

                        Kommentar


                        • #13
                          Dein String in oben geposteted PHP_Code als $data eingesetzt, gibt mir "èsxÖ©6èžUNr•©™" aus

                          Kommentar


                          • #14
                            Werd mal n bissl rumspielen, openSSL liefert mit -p ja alles was man braucht:
                            Code:
                            echo "1234567890" | openssl enc -base64 -e -p -aes-256-cbc -salt -pass pass:123456781234567812345678
                            ergibt :
                            salt=61EB2B377EB0D014
                            key=707313CCFCE0478BD9928DBCCCB7301EF6AB18FACEC91F 4C5D414A91D6CA8566
                            iv =B78356DBC27751FB74853A97186D1933
                            U2FsdGVkX19h6ys3frDQFKwbtMo4uaC6i0bOwnXFOI0=

                            mal schaun, ob ich mit mcrypt das reproduziert krieg.

                            Bugs

                            Kommentar


                            • #15
                              Ok, es geht vorran Erst mal ohne salt und mit definiertem IV:
                              Code:
                              echo "1234567890" | openssl enc -base64 -e -p -aes-256-cbc -salt -pass pass:"123456789" -nosalt -iv 30303030303030303030303030303030
                              lässt sich schonmal hiermit entschlüsseln:
                              PHP-Code:
                              <?php
                               $schluessel
                              ="25F9E794323B453885F5181F1B624D0BD3297E4E62AB02719B8D7C5F981F3A31";   // Hex
                               
                              $initv="30303030303030303030303030303030";        // Hex
                               
                              $orgdata="16IIiFmihqiQEQ5urzw58A==";            // base64

                               
                              $data base64_decode($orgdata);
                               
                               
                              $dec mcrypt_decrypt (MCRYPT_RIJNDAEL_128,pack("H*",$schluessel), 
                                                      
                              $dataMCRYPT_MODE_CBC
                                                      
                              pack("H*",$initv));
                               echo 
                              $dec;
                              ?>
                              Jetzt schau ich mir an, wie openSSL $schluessel aus $pass macht.

                              Bugs

                              Kommentar

                              Lädt...
                              X