升级到VPS协议3.00后,实时加密密钥不起作用

时间:2015-07-21 01:17:29

标签: php sagepay

this question类似,我已将网站迁移到使用VPS协议3.00。 我已经使用测试加密密钥对测试站点进行了测试,并且一切正常。当我将其切换为使用带有实时加密密钥的实时网站时,我收到了可怕的3045 : The Currency field is missing错误。

使用VPS协议2.22时,相同的加密密钥在实际站点上有效,但在切换到3.00时则不行。

我还将帖子数据提供给解密脚本,该脚本使用相同的密钥解密crypt而没有问题。

任何人都可以想到为什么代码会对test.起作用,而不是live.使用适当的密钥,或者为什么2.22接受密钥而3.0不接受? live.是否正在使用3.00进行额外检查test.不是?

我的代码稍微修改了集成套件中的功能:

function addPKCS5Padding($input) {
  $blockSize = 16;
  $padd = "";

  // Pad input to an even block size boundary.
  $length = $blockSize - (strlen($input) % $blockSize);
  for ($i = 1; $i <= $length; $i++) {
    $padd .= chr($length);
  }

  return $input . $padd;
}

// AES encryption, CBC blocking with PKCS5 padding then HEX encoding.
function sagepay_encrypt($string, $key) {
  // Add PKCS5 padding to the text to be encrypted.
  $string = addPKCS5Padding($string);

  // Perform encryption with PHP's MCRYPT module.
  $crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key);

  // Perform hex encoding and return.
  return "@" . strtoupper(bin2hex($crypt));
}

通过填充$crypt_values数组并调用:

来调用它
$crypt_source = sagepay_buildcrypt($crypt_values);
$crypt = sagepay_encrypt($crypt_source, $sagepay_key);

$crypt_source在所有情况下都有效且(大部分)相同:

VendorTxCode=20150721020857Deannatest&VendorData=Deanna test&Amount=1&Currency=GBP&Description=Quote Reference Deanna test&BillingSurname=Earley&BillingFirstnames=Deanna&BillingAddress1.....

1 个答案:

答案 0 :(得分:1)

查看加密密码,它太短一个字符。我通过在末尾添加'X'(大写)来更新它,所以只需相应地更新你的值。

我试了一下它现在很好。

我假设您使用的是以“3Gd”开头的密码(如果不让我知道的话)。