杉哥的个人博客

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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);
}
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); }
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);
}