这是 AES/CBC/PKCS#5 与 Sagepay 表单集成配合使用的工作实现
您将需要安装 mcrypt。 sp_encryption 是加密密钥的定义。
/**
* @param string $data - the key=value pairs separated with &
* @return string
*/
protected function encode_data($data) {
$strIn = $this->pkcs5_pad($data);
$strCrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, sp_encryption, $strIn, MCRYPT_MODE_CBC, sp_encryption);
return "@" . bin2hex($strCrypt);
}
/**
* @param string $data - crypt response from Sagepay
* @return string
*/
protected function decode_data($data) {
if (substr($data, 0, 1) == "@") {
$strIn = hex2bin(substr($data, 1));
return $this->pkcs5_unpad(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, sp_encryption, $strIn, MCRYPT_MODE_CBC, sp_encryption));
}
return '';
}
protected function pkcs5_pad($text) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $size - (strlen($text) % $size);
return $text . str_repeat(chr($pad), $pad);
}
protected function pkcs5_unpad($text) {
$pad = ord($text{strlen($text) - 1});
if ($pad > strlen($text)) return false;
if (strspn($text, $text{strlen($text) - 1}, strlen($text) - $pad) != $pad) {
return false;
}
return substr($text, 0, -1 * $pad);
}
附带说明一下,请确保您使用的 VPSProtocol 是“3.00”而不是 3,也不是 3.0,因为这些将不起作用!
希望这会有所帮助,并且 sagepay 很快就会发布一些官方 PHP 文档。