代码之家  ›  专栏  ›  技术社区  ›  Hafiz

aes-128-cbc的openssl_解密不工作

  •  0
  • Hafiz  · 技术社区  · 6 年前

    我正在解密一些来自api的内容。他们也发出了命令。下面是命令,它工作得很好:

    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 文档:

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

    我还尝试在这个函数的第一个参数中给出base64解码值。加密方法看起来也不错。以及api文档中所述的零填充。我认为唯一值得怀疑的是,如果我做错了,请告诉我。我试过不用静脉注射,但没有用。或者让我知道我在别的事情上做错了什么。

    1 回复  |  直到 6 年前
        1
  •  1
  •   umair    6 年前

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

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