Problem mit RC4 verschlüsselung

  • Ich habe ein Script das mit einem .php Script kommuniziert

    Der AutoIt Code zum verschlüsseln in RC4 sieht so aus

    Der PHP Code sieht so aus

    Diese beiden funktionieren auch prima miteinander, zumindest für mich und viele andere, für manche user jedoch nicht, momentan hab ich den Verdacht das es irgendwas mit der OS Sprache zu tun hat denn diese haben ein Chinesisches OS

    z.B. sieht der verschlüsselte Code bei mir so aus

    Zitat


    0x67886FAA5051FDB8100A873B837D76C105E3F2F36F01C94520DEF841F63F3187B4BB5EC4C63CB4D69216BCAC03CF8E684F9C542FCBE42BE50E1051F2

    Bei einem Chinesischem OS sieht der selbe Text encrypted allerdings so aus

    Zitat

    0x673F6F3F50513F3F100A3F3B3F7D763F053F3F3F6F013F45203F3F413F3F313F3F3F5E3F3F3C3F3F3F163F3F033F3F684F3F542F3F3F2B3F0E10513F

    (Die verschlüsselten Texte wurden mit StringToBinary umgewandelt)

    habt ihr eine Idee warum es bei manchen einfach nicht funktionieren will oder kennt ihr eine bessere encrypt Funktion die bei AutoIt <--> PHP gut funktioniert?

    Einmal editiert, zuletzt von Tyzer (27. März 2019 um 19:46)

  • Ja Crypt hab ich schon damals immer benutzt das Problem ist allerdings das ich den verschlüsselten Text davon nicht in PHP entschlüsseln kann, da fehlt mir einfach die Funktion für.

    Ich möchte das ganze schon verschlüsselt übertragen gibt ja genug Programme mit den man den Traffic mitlesen kann, da soll er nicht auch noch lesbar sein.

  • Ich weiß allerdings fehlt mir da eine gescheite Verschlüsselungs / Entschlüsselungs Funktion die mit AutoIt <-> PHP funktioniert.

    Möchtest Du im AutoIt-Skript verschlüsseln und dann im PHP-Skript entschlüsseln, oder muss es auch umgekehrt gehen (in PHP verschlüsseln, in AutoIt entschlüsseln) ?


    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ja beides muss gehen, ein Text wird verschlüsselt von AutoIt und an die .php gesendet diese entschlüsselt den Text, verarbeitet diesen und gibt einen verschlüsselten Text aus den man mit AutoIt wieder entschlüsselt

  • Hi Tyzer !

    Hier eine Variante mit AES-256 Bit Verschlüsselung :

    AutoIt :

    PHP :

    EDIT (Nachtrag) :

    Tyzer -> Hinweis

    mcrypt_encrypt und mcrypt_decrypt sind gültig für PHP-Versionen >= 4.0.2, PHP 5, PHP 7 < 7.2.0

    Bei PHP >= 7.2.0 müsste man mit openssl_encrypt() bzw. openssl_decrypt() arbeiten

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (27. März 2019 um 21:43)

  • Dein code funktioniert soweit, jetzt wollte ich das in eine easy to use funktion packen, bei AutoIt kenn ich mich gut aus da ging das ohne Probleme, aber bei PHP bin ich noch nicht ganz so erfahren

    AutoIt:

    PHP Code:

    Die PHP gibt mir allerdings immer nur das zurück

    <p></p><p></p>
  • Die PHP gibt mir allerdings immer nur das zurück

    <p></p><p></p>


    1. Du verwendest 2 x AESEncrypt :

    $Encr = AESEncrypt("test123","SomePassword");

    echo '<p>' . utf8_encode($Encr) . '</p>'; // nur zur Anzeige

    $Decr = AESEncrypt($Encr,"SomePassword");

    echo '<p>' . utf8_encode($Decr) . '</p>'; // nur zur Anzeige


    2. Deine Keysize ist falsch -> "SomePassword" ist nur 12 Stellen lang :

    Warning: mcrypt_encrypt(): Key of size 12 not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported

    AutoIt :

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Oh man wie konnte ich das nur übersehen, vielen dank nochmal :)

    In AutoIt muss der Key nicht zwingend die Länge 16, 24 oder 32 haben. In PHP schon, daher verwende in beiden Skripten besser einen Key mit der Länge 32.

    Wenn man Daten in AutoIt mit AES_256 verschlüsselt, dann muss man in PHP MCRYPT_RIJNDAEL_128 verwenden (und 'padden'). MCRYPT_RIJNDAEL_256 wäre nicht äquivalent zu AES_256.

    Noch ein Hinweis :

    Falls Du mit Sonderzeichen Probleme bekommst, dann im AutoIt-Skript :

    -> BinaryToString (expression [, flag = 1] )

    das [optionale Flag] auf 4 setzen, also UTF8 (Default ist 1 = ANSI)

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Also mit AutoIt verschlüsseln dann zur .php senden dort entschlüsseln funktioniert, anders rum aber leider nicht.


    Mit PHP den in PHP verschlüsselten String zu entschlüsseln funktioniert, den gleichen String mit dem gleichen Password in AutoIt zu entschlüsseln gibt allerdings nichts richtiges zurück :(

  • Mit PHP den in PHP verschlüsselten String zu entschlüsseln funktioniert, den gleichen String mit dem gleichen Password in AutoIt zu entschlüsseln gibt allerdings nichts richtiges zurück

    Also mit meinem Skripten geht es einwandfrei - in beide Richtungen !

    Poste bitte mal Deine aktuellen Skripte. Ich werde jetzt aber nicht mehr dazu kommen, Zeit für's Bett ;)

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • PHP:

    gibt das hier aus

    Code
    <p>Some text
    
    1234</p>

    das ist korrekt, ausser der letzte character vor dem </p>

    EDIT: Dieser ungültige character wird hier auf autoit.de nicht angezeigt

    AutoIt:

    Das gibt mir dann allerdings nur

    Code
    ÿÿÿÿ
  • Hi Tyzer

    Die Ausgabe Deiner PHP ergibt :

    Some text 1234 ergibt in PHP 579e9eba6fd7ab66566fb5cda0f5f90e

    Du verwendest aber : 8a43daefb0a2ec446a92044a7c52434e

    AutoIt: ...

    Das gibt mir dann allerdings nur

    ÿÿÿÿ

    Aus Deinem AutoIt-Skript :

    $Decrypt = BinaryToString(_Crypt_DecryptData(Binary($tString), $tKey, $CALG_USERKEY))

    Du hast '0x' & vergessen :

    $Decrypt = BinaryToString(_Crypt_DecryptData(Binary('0x' & $tString), $tKey, $CALG_USERKEY))

    Hier eine AutoIt-Skript mit beiden Varianten (ich habe die Ausgaben in <...> eingebettet) :

    Das ergibt dann bei meiner Variante :

    Spoiler anzeigen

    Decrypted 2 = <Some text

    1234>

    Ersetzt Du in meiner Variante 8a43daefb0a2ec446a92044a7c52434e durch 579e9eba6fd7ab66566fb5cda0f5f90e bekommst Du auch in AutoIt wieder Some text 1234

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Perfekt alles läuft nun, danke dir :)

    Prima :)

    Ich habe noch mal bzgl. der 'komischen Zeichen' bei PHP nachgeschaut (siehe Grafik Beitrag #17).

    Diese können durch das 'Padding' 'entstehen. Beim Entschlüsseln in PHP muss daher ggf. noch ein pkcs5_Unpad 'rein. Falls Du das benötigst bzw. einbauen möchtest, hier die jeweiligen Skripte (meine Variante, also noch nicht in Funktionen ausgelagert).

    PHP :

    AutoIt :

    Jetzt bleibt nur noch zu hoffen das die Verschlüsselung auch wirklich bei allen funktioniert

    Falls nicht, melde Dich einfach ;).

    Gruß Musashi