Я хочу использовать функцию 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.
Спасибо.
openssl_encrypt
ничего не кодирует напрямую, он просто возвращает строку, состоящую из байтов. Не обманывайтесь официальным API, ключ и IV также должны быть указаны в байтах.
Итак, ваш первый autoit _AesEncryptCbc
должен обычно возвращать то же самое двоичный строка. Если вы хотите сравнить текст, вы можете закодировать openssl_encrypt
с Base64 также.
Протестируйте с открытым текстовым сообщением, чем 16 байтов. Если вы используете такую большую строку и отличается только последняя часть, то _AesEncryptCbc
может не использовать PKCS # 7-совместимое заполнение (по умолчанию для OpenSSL).
Других решений пока нет …