杉哥的个人博客

在PHP和java之间实现AES/ECB/PKCS7Padding加密和解密互通问题

在PHP中,可以使用openssl扩展来实现AES/ECB/PKCS7Padding解密。我们需要自己实现PKCS7Padding和PKCS7Unpadding,因为openssl_encrypt和openssl_decrypt函数默认不使用PKCS7Padding。

private function encrypt($str)
{
    $str = $this->pkcs7_pad($str, 16);
    $rt = openssl_encrypt($str, 'AES-128-ECB', $this->aesKey, OPENSSL_NO_PADDING);
    return strtoupper(bin2hex($rt));
}

private function decrypt($str)
{
    $str = hex2bin(strtolower($str));
    $data = openssl_decrypt($str, 'AES-128-ECB', $this->aesKey, OPENSSL_NO_PADDING);
    return $this->pkcs7_unpad($data);
}

private function pkcs7_pad($source, $block)
{
    $pad = $block - (strlen($source) % $block);
    return $source . str_repeat(chr($pad), $pad);
}