openssl_decrypt for aes-128-cbc not working

时间:2018-05-31 08:41:00

标签: php openssl php-7.1 php-openssl initialization-vector

我正致力于解密来自API的一些内容。他们也提供了一个命令。所以下面的一些mofication是命令,它完全正常:

openssl enc -d -aes-128-cbc -K 422943374a3568755d7c527f6e472132 -iv 00000000000000000000000000000000 -nopad -in <(echo 'D5fiXKI4ie4c69gcCwM4/p414yrYtH9np+piNoqZASbkUnHAvbB4norHz6d6uzJmIg1sULhHFmfQTkvpw0tIEVmNcjyP6j2LK8zXYzohtNlsqBHx5v4xHEIyCcvfbMJddd5hs97jqkUtHuQyer2GdfDKZseaGgpXJ75GK7uKFPkbJ3wgQ6A0Q7q2tbBYeXEDmRMO6OhWeHgrezQOcyjcdOQk50SjMuaSb9IRimwagXamiXRg0LyTzA18a0SuqtbKCNgXnmhf39YxJUudkRmcMQ==' | base64 --decode)

我需要用PHP编写代码,所以我需要在PHP中翻译相同的东西,这是我用PHP编写的:

$encodedStr = "PYroeIibeYwy/waD3opLw6yWT6Wfv3AhBKhQpoR+6qT9gx/bTDdR9QIfXcVURoQ2QlTl8L+JZX4Ije8M+FAQOxVmEXAmyUpzLgeg7aRCA6iiJbav/W3xW0BWb3D3QELjKTN4KRB2FdM7G5eIIfvjpeySLxQ3h7eL16nQf+1rms4VoVsBaeO8aU+Zy9saKZR4oL+k40m6tjtvtXryg7sWcmUgdonP/Jg4osESrY3MmGl7qXSpJC+v4g3iOY7s8NwywSN9q2Id7P0IaVtb5AFOEQ==";
$secretHash = ",MF-,2Y*s8DoYCFI";
$encryptionMethod = "AES-128-CBC";
$iv = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";

$encrypted = base64_decode($encodedStr);

$hexKey = strToHex($secretHash);

$response = openssl_decrypt($encodedStr, $encryptionMethod, $hexKey, OPENSSL_ZERO_PADDING, $iv);

作为回应,我得到一串奇数字符而不是实际字符串,我可以从命令行中的openssl命令获得。

根据openssl_decrypt文档:

  

使用raw或base64编码的字符串并使用给定的方法和密钥对其进行解密。

我也试过在这个函数的第一个参数中给出base64解码值。加密方法似乎也很好。和API文档中说明的零填充。只有我认为可以怀疑的是零iv。如果我以错误的方式制作零iv,请告诉我。我尝试过不使用iv,但没有用。或者也让我知道我是否在其他方面做错了。

1 个答案:

答案 0 :(得分:1)

openssl_decrypt期望密钥是二进制而不是十六进制。您不需要将$ secretHash转换为十六进制并按原样传递它。

$response = openssl_decrypt($encodedStr, $encryptionMethod, $secretHash, OPENSSL_ZERO_PADDING, $iv);