2017-02-05 1 views
0

autoit에서 PHP openssl_encrypt 함수를 사용하고 싶습니다. AES and Base64 UDF을 찾았으므로 openssl_encrypt 함수를 만들 수 있어야합니다. 또한 시도aes로 openssl_encrypt 함수를 표현하는 방법

#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 

그리고 : :이 코드 AutoIt이 함께 노력

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

:

#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 

그러나 출력이 다른 이것은 내가 AutoIt을에 복제하는 데 필요한 기능입니다 때마다 (PHP, 첫 번째 autoit 및 두 번째 autoit). 나는 openssl이 aes 암호화의 base64 인코딩 일 뿐이라고 생각했지만 그것은 그렇지 않은 것 같습니다. 누군가 autoit 부분뿐만 아니라 aes 및 base64 함수를 사용하여 openssl_encrypt 함수를 구현하는 방법을 설명함으로써 나를 도울 수 있습니까? 감사합니다.

답변

2

openssl_encrypt은 직접 인코딩하지 않으며 바이트로 구성된 문자열을 반환합니다. 공식 API에 속지 마십시오. 키와 IV는 바이트 단위로 지정되어야합니다.

따라서 첫 번째 자동 입력 _AesEncryptCbc은 보통 이진 문자열을 반환해야합니다. 텍스트를 비교하려면 openssl_encrypt을 Base64로 인코딩 할 수 있습니다.

16 바이트보다 큰 일반 텍스트 메시지로 테스트하십시오. 큰 문자열을 사용하고 마지막 부분 만 다른 경우 _AesEncryptCbc은 PKCS # 7 호환 패딩 (OpenSSL의 기본값)을 사용할 수 없습니다.