im AutoIt verschlüsseln und im PHP entschlüsseln

  • Hi Leute.


    Hab ein kleines Problem bei dem Ihr mir sicher schnell helfen könnt.


    Ich möchte im AutoIt eine Zeichenfolge per AES128 verschlüsseln, mit InetRead an einen Webserver übergeben und der solls mir dann wieder entschlüsseln.

    Leider möchte das nicht so recht funktionieren.


    Kurzes Beispiel AutoIt:

    Spoiler anzeigen
    [autoit]


    #include<Crypt.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $Key="12345"
    $Text="verschlüssel mich!"

    [/autoit] [autoit][/autoit] [autoit]

    _Crypt_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"Test",Hex(_Crypt_EncryptData($Text,$Key,$CALG_AES_128)))

    [/autoit] [autoit][/autoit] [autoit]

    _Crypt_Shutdown()

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Ausgegeben wird mir hier "72C76850FE191E39EC7C937D5700D29243EBB05025D6DEF98A44BC8F6017C04B"


    kurzes Beispiel PHP:

    Spoiler anzeigen
    PHP
    <?php 
    { 
    $key = "12345"; 
    $text = "verschlüssel mich!"; 
    $crypttext = bin2hex (mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC)); 
    } 
    echo "$crypttext <br />\n"; 
    ?>

    Das Ergebnis hier lautet "9f5de04d57e0f7724b807e900544373fc03f923dfa0cef7b51842075c9b044d1"


    Hab im MCRYPT auch andere Methoden bei der Verschlüsselung verwendet, komme aber trotzdem nicht auf ein einheitliches Ergebnis ?(


    Kann mir da jemand helfen?


    Danke schon mal im Voraus.


    LG Alastor

  • Puh, dass werde ich wohl nicht schaffen. Bin eher ein Noob. Die Crypt.au3 verwendet eine dll die es mir wohl unmöglich macht einfach "abzuschreiben" oder?


    Danke und LG,


    Alastor

  • mhh scripte doch einfach deinen eigenen verschlüsselungsalgo...
    einfach ein paar bits vertauschen, ein bisschen rekursiv aufrufen lassen und fertig^^

  • nö, wohl eher nicht. Da würde ich lieber auf eine Verschlüsselungsmethode vertrauen die von jemandem gemacht wurde der sich auskennt. ^^

  • Soweit mir bekannt ist benutzt die StringCrypt-Funktion die RC4 Verschlüsselung. Diese basiert nur auf einem Passwortgenerator und ist nur mässig "sicher".

    Wundert sich den keiner von euch das zwei Funktionen in unterschiedlichen Programmiersprachen das selbe tun sollen aber nicht das selbe dabei raus kommt?

    Oder ist AES nicht gleich AES? Gibt es da unterschiedliche Verschlüsselungen die den gleichen Namen haben?


    LG Alastor

  • Zitat von ThreadErsteller

    Puh, dass werde ich wohl nicht schaffen. Bin eher ein Noob. Die Crypt.au3 verwendet eine dll die es mir wohl unmöglich macht einfach "abzuschreiben" oder?

  • Ich glaube nicht das dieser Key den man bei _Crypt_EncryptData angeben muss auch wirklich der ist der verwendet wird um es zu verschlüsseln.

    In der Funktion wird eine andere Funktion (_Crypt_DeriveKey) aufgerufen die irgendetwas mit dem Key macht bevor Verschlüsselt wird...

    Könnte jemand so nett sein und sich ansehen was da genau passiert mit dem Key? Wenn ich es mir ansehe versteh ich nur Bahnhof :wacko:


    Danke und gute Nacht,


    Alastor

  • Ohne Code? - Nein

    EDIT:
    Habe mal schnell selber eine Verschlüsselung gebaut:
    (Ich hoffe das schaffst du in PHP zu übersetzen)

    Spoiler anzeigen
    [autoit]


    $str1=_StringCrypt("Hallo","pw")
    $str2=_StringDecrypt($str1,"pw")
    MsgBox(0,$str1,$str2)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _StringCrypt($str,$pw)
    Local $cstr="",$asc
    For $x=1 To StringLen($str)
    $asc=Asc(StringMid($str,$x,1))
    $asc=BitShift($asc,-8)+Asc(StringMid($pw,$x,1))
    ConsoleWrite($asc&" "&Hex($asc,4)&@CRLF)
    $cstr&=Hex($asc,4)
    Next
    Return $cstr
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _StringDecrypt($str,$pw)
    Local $cstr="",$asc
    For $x=1 To StringLen($str) Step 4
    $asc=Dec(StringMid($str,$x,4))
    $asc-=Asc(StringMid($pw,$x,1))
    $asc=BitShift($asc,8)
    $cstr&=Chr($asc)
    Next
    Return $cstr
    EndFunc

    [/autoit]

    EDIT:
    Noch unsicherer, berichite gerade paar Dinge

    2 Mal editiert, zuletzt von TheShadowAE (26. Mai 2010 um 07:45)

  • Gib mal in der php datei den gleichen string ein , mal sehen ob es genau so verschlüsselt wird

  • Den Code brauch ich dir nicht geben weil es ne UDF ist...aber hier noch mal zum mitschreiben die beiden UDFs von denen ich rede


    Spoiler anzeigen
    [autoit]



    Func _Crypt_EncryptData($vData, $vCryptKey, $iALG_ID, $fFinal = True)
    Local $hBuff
    Local $iError
    Local $vReturn
    Local $ReqBuffSize
    Local $aRet
    _Crypt_Startup()
    Do
    If $iALG_ID <> $CALG_USERKEY Then
    $vCryptKey = _Crypt_DeriveKey( $vCryptKey,$iALG_ID)
    If @error Then
    $iError = 1
    $vReturn = -1
    ExitLoop
    EndIf
    EndIf
    $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptEncrypt", "ptr", $vCryptKey, "ptr", 0, "bool", 1, "dword", 0, "ptr", 0, _
    "dword*", BinaryLen($vData), "dword", 0)
    If @error Or Not $aRet[0] Then
    $iError = 2
    $vReturn = -1
    ExitLoop
    EndIf
    $ReqBuffSize = $aRet[6]
    $hBuff = DllStructCreate("byte[" & $ReqBuffSize & "]")
    DllStructSetData($hBuff, 1, $vData)
    $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptEncrypt", "ptr", $vCryptKey, "ptr", 0, "bool", $fFinal, "dword", 0, "ptr", DllStructGetPtr($hBuff), _
    "dword*", BinaryLen($vData), "dword", DllStructGetSize($hBuff))
    If @error Or Not $aRet[0] Then
    $iError = 3
    $vReturn = -1
    ExitLoop
    EndIf
    $iError = 0
    $vReturn = DllStructGetData($hBuff, 1)
    Until True
    If $iALG_ID <> $CALG_USERKEY Then _Crypt_DestroyKey($vCryptKey)
    _Crypt_Shutdown()
    Return SetError($iError, 0, $vReturn)
    EndFunc ;==>_Crypt_EncryptData

    Func _Crypt_DeriveKey($vPassword, $iALG_ID, $iHash_ALG_ID = $CALG_MD5)
    Local $aRet
    Local $hCryptHash
    Local $hBuff
    Local $iError
    Local $vReturn
    _Crypt_Startup()
    Do
    ; Create Hash object
    $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptCreateHash", "handle", __Crypt_Context(), "uint", $iHash_ALG_ID, "ptr", 0, "dword", 0, "handle*", 0)
    If @error Or Not $aRet[0] Then
    $iError = 1
    $vReturn = -1
    ExitLoop
    EndIf
    $hCryptHash = $aRet[5]
    $hBuff = DllStructCreate("byte[" & BinaryLen($vPassword) & "]")
    DllStructSetData($hBuff, 1, $vPassword)
    $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptHashData", "handle", $hCryptHash, "ptr", DllStructGetPtr($hBuff), "dword", DllStructGetSize($hBuff), "dword", $CRYPT_USERDATA)
    If @error Or Not $aRet[0] Then
    $iError = 2
    $vReturn = -1
    ExitLoop
    EndIf
    ; Create key
    $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptDeriveKey", "handle", __Crypt_Context(), "uint", $iALG_ID, "handle", $hCryptHash, "dword", $CRYPT_EXPORTABLE, "handle*", 0)
    If @error Or Not $aRet[0] Then
    $iError = 3
    $vReturn = -1
    ExitLoop
    EndIf
    $iError = 0
    $vReturn = $aRet[5]
    Until True
    If $hCryptHash <> 0 Then DllCall(__Crypt_DllHandle(), "bool", "CryptDestroyHash", "handle", $hCryptHash)
    Return SetError($iError, 0, $vReturn)
    EndFunc ;==>_Crypt_DeriveKey

    [/autoit]