使用openssl_encrypt转换mcrypt_encrypt以进行Sage Pay Form集成

时间:2019-11-07 14:02:24

标签: php encryption openssl mcrypt sagepay

由于服务器升级(php 5-> 7),在PHP 7.2中将mcrypt_encrypt函数弃用后,我们需要对其进行重构。我相信openssl_encrypt是最好的操作方法,尽管我觉得自己已经完成了所有正确的步骤,但似乎无法正常运行。

我认为密钥大小和块大小存在一些混淆。该字符串需要在CBC模式下使用AES(块大小为128位)在BCCS模式下进行加密,并使用提供的密码作为密钥和初始化向量,并使用PKCS#5填充,并将结果编码为十六进制(确保字母为大写) 。我们还需要在编码结果的开头加上“ @”符号

因此,我们需要转换的代码是以下两个函数:

protected function encryptAndEncode($strIn) {
    $strIn = $this->pkcs5_pad($strIn, 16);
    return "@".bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->encryptPassword, $strIn, MCRYPT_MODE_CBC, $this->encryptPassword));
}

protected function decodeAndDecrypt($strIn) {
    $strIn = substr($strIn, 1);
    $strIn = pack('H*', $strIn);
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->encryptPassword, $strIn, MCRYPT_MODE_CBC, $this->encryptPassword);
}
protected function pkcs5_pad($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }

我们到目前为止生成的代码如下,不确定为什么它不起作用:

protected function encryptAndEncode($strIn) {
    $strIn = $this->pkcs5_pad($strIn, 16);
    return "@".bin2hex(openssl_encrypt($strIn, 'AES-128-CBC', $this->encryptPassword, OPENSSL_RAW_DATA, $this->encryptPassword));
}

protected function decodeAndDecrypt($strIn) {
    $strIn = substr($strIn, 1);
    $strIn = pack('H*', $strIn);
    return openssl_encrypt($strIn, 'AES-128-CBC', $this->encryptPassword, OPENSSL_RAW_DATA, $this->encryptPassword);
}
protected function pkcs5_pad($text, $blocksize) {
    $pad = $blocksize - (strlen($text) % $blocksize);
    return $text . str_repeat(chr($pad), $pad);
}

任何帮助将不胜感激,因为我碰壁了!预先感谢您的协助。如果您有关于此事的建议资源,也将不胜感激。


最近在下面尝试了关于填充的解决方案found here,但似乎没有解决该功能-还添加了一条额外的信息

0 个答案:

没有答案
相关问题