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

加密AES 128

  •  1
  • Hula Hula  · 技术社区  · 6 年前

    我在工作中被要求通过以下说明实现对简单Web服务的请求:

    AES加密:
    类型:ECB
    大小:128位
    填充模式:pkcs7
    密钥:9B6018215942B2E1DA3797D3394779BF

    在文档(只是一个给定的例子)中,他们说对于字符串:

    2874838-49号

    加密过程必须生成:

    BEE361962A1802A7BAAD328DAE8B291

    我一直在寻找类似的东西,但没有任何解决方案(比如 here , here here 等)给出的帮助我实现了给出的示例结果。

    这是我现在做的最后一件事:

    function aes128Encrypt($data, $key) {
      $padding = 32 - (strlen($data) % 32);
      $data .= str_repeat(chr($padding), $padding);
      return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB));
    }
    $data = "2874838-49";
    $key = "9b6018215942b2e1da3797d3394779bf";    
    echo aes128Encrypt($data, $key); // UdP7dXSTp6b5I986PLL8Gs3qH3rMj0SpQ0te4pP7M44=
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Tschallacka    6 年前

    编码算法返回编码数据的字节流。

    您所拥有的示例不提供base64编码的数据变体,而是提供十六进制表示。

    在你的情况下,换掉 base64_encode 对于 bin2hex 答案应该是一致的。

    function aes128Encrypt($data, $key) {
      $padding = 32 - (strlen($data) % 32);
      $data .= str_repeat(chr($padding), $padding);
      return bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB));
    }
    $data = "2874838-49";
    $key = "keyshouldbeplacedhere";    
    echo aes128Encrypt($data, $key);