Как выразить функцию openssl_encrypt с помощью aes

Я хочу использовать функцию php openssl_encrypt в autoit.
я нашел AES и Base64 UDF, поэтому я должен быть в состоянии создать функцию openssl_encrypt.
Это функция, которую мне нужно скопировать в autoit:

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

Я пытался с autoit с этим кодом:

#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

А также попробовал:

#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

Но вывод каждый раз отличается (php, первый autoit и второй autoit).
Я думал, что openssl был просто base64-кодированием шифрования aes, но, похоже, это не так. Может ли кто-нибудь помочь мне, не только в части autoit, но и объяснив мне, как реализовать функцию openssl_encrypt, используя функции aes и base64.
Спасибо.

0

Решение

openssl_encrypt ничего не кодирует напрямую, он просто возвращает строку, состоящую из байтов. Не обманывайтесь официальным API, ключ и IV также должны быть указаны в байтах.

Итак, ваш первый autoit _AesEncryptCbc должен обычно возвращать то же самое двоичный строка. Если вы хотите сравнить текст, вы можете закодировать openssl_encrypt с Base64 также.

Протестируйте с открытым текстовым сообщением, чем 16 байтов. Если вы используете такую ​​большую строку и отличается только последняя часть, то _AesEncryptCbc может не использовать PKCS # 7-совместимое заполнение (по умолчанию для OpenSSL).

2

Другие решения

Других решений пока нет …