2017-02-05 2 views
0

ausdrücken möchte Ich möchte die Funktion php openssl_encrypt in Autoit verwenden. Ich habe AES and Base64 UDF gefunden, also sollte ich in der Lage sein, eine openssl_encrypt Funktion zu erstellen. Dies ist die Funktion, die ich in autoit replizieren müssen:Wie man openssl_encrypt Funktion mit AES

function cripta($data){ 
    return openssl_encrypt($data,'AES-128-CBC',base64_decode("dGVzdHBhc3N3b3JkLi4uLg=="),0,"0102030405060708"); 
} 

ich mit autoit mit diesem Code versucht:

#Include "AES.au3" 
#include "BASE64.au3" 

Global $mainKey = "dGVzdHBhc3N3b3JkLi4uLg==" 
Global $mainIV = "0102030405060708" 


_AES_Startup() 
ConsoleWrite(cripta("test") & @CRLF) 


Func cripta($Data) 
    Global $mainKey, $mainIV 
    $Key = _Base64Decode($mainKey) 
    Return BinaryToString(_Base64Encode(_AesEncrypt($Key, $Data, $AES_CBC_MODE, $mainIV))) 
EndFunc 

Und auch versucht:

#Include "AES.au3" 
#include "BASE64.au3" 

Global $mainKey = "dGVzdHBhc3N3b3JkLi4uLg==" 
Global $mainIV = "0102030405060708" 


_AES_Startup() 
ConsoleWrite(cripta("test") & @CRLF) 


Func cripta($Data) 
    Global $mainKey, $mainIV 
    $Key = _AesEncryptKey(_Base64Decode($mainKey)) 
    Return BinaryToString(_Base64Encode(_AesEncryptCBC($Key, $mainIV, $Data))) 
EndFunc 

Aber der Ausgang ist anders jedes mal (php, erste autoit und zweite autoit). Ich dachte, dass OpenSSL nur Base64-Codierung von AES-Verschlüsselung ist, aber es scheint, dass es nicht ist. Kann mir jemand helfen, nicht nur im Autoit-Teil, sondern auch indem er mir erklärt, wie ich die Funktion openssl_encrypt mit AES- und Base64-Funktionen ausführen kann. Danke.

Antwort

2

openssl_encrypt codiert nichts direkt, es gibt einfach eine Zeichenfolge aus Bytes zurück. Lassen Sie sich nicht von der offiziellen API täuschen, sowohl der Schlüssel als auch der IV müssen ebenfalls in Bytes angegeben werden.

So sollte Ihre erste Autoit _AesEncryptCbc normalerweise die gleiche binäre Zeichenfolge zurückgeben. Wenn Sie Text vergleichen möchten, können Sie auch die openssl_encrypt mit Base64 kodieren.

Test mit einer größeren Klartextnachricht als 16 Bytes. Wenn Sie eine solche größere Zeichenfolge verwenden und nur der letzte Teil abweicht, darf _AesEncryptCbc PKCS # 7-kompatibles Padding nicht verwenden (die Standardeinstellung für OpenSSL).

Verwandte Themen