我想在autoit中使用php openssl_encrypt函数。 我找到了AES and 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,first autoit和second autoit)。 我认为openssl只是aes加密的base64编码,但似乎不是。有人可以帮助我,不仅仅是在自动部分,而且还通过解释我如何使用aes和base64函数来实现openssl_encrypt函数。 谢谢。
答案 0 :(得分:2)
openssl_encrypt
不直接编码任何东西,它只返回一个由字节组成的字符串。不要被官方API所迷惑,密钥和IV也需要以字节为单位指定。
因此,您的第一个自动_AesEncryptCbc
通常应返回相同的二进制字符串。如果您想比较文本,您可能也希望将openssl_encrypt
编码为Base64。
使用大于16字节的明文消息进行测试。如果您使用这么大的字符串并且只有最后一部分不同,那么_AesEncryptCbc
可能不会使用PKCS#7兼容填充(OpenSSL的默认值)。