当尝试在AES中移动mcrypt_encrypt函数openssl_encrypt时,得到了不同的结果。
function encrypt3($data, $secret){
//Generate a key from a hash
$key = md5(utf8_encode($secret), true);
//Pad for PKCS7
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$len = strlen($data);
$pad = $blockSize - ($len % $blockSize);
$data .= str_repeat(chr($pad), $pad);
//Encrypt data MCRYPT_RIJNDAEL_128, ECB equal to C# AES
$encData = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB);
return base64_encode($encData);
}
function en_test($data,$cipher_method,$secret_key,$iv){
$secret_key = md5(utf8_encode($secret_key), true);
$result = openssl_encrypt($data, $cipher_method, $secret_key, OPENSSL_RAW_DATA, 0);
return base64_encode($result);
}
$result = openssl_encrypt($data, "AES-128-CBC", $secret_key, OPENSSL_RAW_DATA, 0);
在mcrypt_encrypt中没有iv传递,我尝试不将IV传递给open_ssl,但是会出错, IV传递的只有1个字节长,密码期望IV恰好是16个字节, 在.net示例代码中,需要传递$ iv值。
任何帮助将不胜感激。
谢谢