在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);
}
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); }