Php 如何用aes表示openssl_加密函数

Php 如何用aes表示openssl_加密函数,php,encryption,aes,autoit,php-openssl,Php,Encryption,Aes,Autoit,Php Openssl,我想在autoit中使用php openssl_加密函数。 我找到了,所以我应该能够创建一个openssl_加密函数。 这是我需要在autoit中复制的功能: function cripta($data){ return openssl_encrypt($data,'AES-128-CBC',base64_decode("dGVzdHBhc3N3b3JkLi4uLg=="),0,"0102030405060708"); } 我用以下代码尝试了autoit: #Include "AES.

我想在autoit中使用php openssl_加密函数。 我找到了,所以我应该能够创建一个openssl_加密函数。 这是我需要在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编码,但事实似乎并非如此。有人能帮我吗,不仅仅是在autoit部分,还有人能帮我解释一下如何使用aes和base64函数实现openssl_加密函数。
谢谢。

openssl\u encrypt
不直接编码任何内容,它只返回由字节组成的字符串。不要被官方API所愚弄,密钥和IV也需要以字节为单位指定

因此,您的第一个autoit
\u CBC
通常应返回相同的二进制字符串。如果要比较文本,可能还需要将
openssl\u encrypt
编码为Base64


使用大于16字节的纯文本消息进行测试。如果您使用如此大的字符串,并且只有最后一部分不同,那么
\u AESCEncryptCBC
可能不会使用PKCS#7兼容的填充(OpenSSL的默认设置)。

OpenSSL\u encrypt
不会直接编码任何内容,它只返回由字节组成的字符串。不要被官方API所愚弄,密钥和IV也需要以字节为单位指定

因此,您的第一个autoit
\u CBC
通常应返回相同的二进制字符串。如果要比较文本,可能还需要将
openssl\u encrypt
编码为Base64

使用大于16字节的纯文本消息进行测试。如果您使用如此大的字符串,并且只有最后一部分不同,那么
\u AESCEncryptCBC
可能不会使用PKCS#7兼容的填充(OpenSSL的默认设置)