PHP 中的 AES/CBC/PKCS#5 加密算法

2024-03-09

我正在尝试使用“表单集成”方法将 SagePay 支付网关集成到网站中。

基本上,表单集成方法的工作原理是在网页中插入表单,并在选择表单的“提交”按钮时将信息发布到 SagePay 的服务器。在将信息发送到 SagePay 的服务器之前,必须使用 AES/CBC/PKCS#5 算法对其进行加密,然后进行 Base 64 编码。

我有加密的基本知识,但没有在 PHP 中使用它的经验。谁能帮我用 PHP 制定 AES/CBC/PKCS#5 算法吗?

这是我迄今为止所做的努力:

$CRYPT = "Text Goes Here";

$blocksize = 16;//Does 16 Refer To 16 Bytes Or 16 Bits? 16 Bytes = 128 Bits.
$cryptLength = strlen($CRYPT);
$cryptLengthModuloBlocksize = $cryptLength % $blocksize;
$pad = $blocksize - $cryptLengthModuloBlocksize;
$padString = str_repeat(chr($pad), $pad);
$CRYPT = $CRYPT . $padString;

$encryptionPassword = 'password';
$Encrypted_CRYPT = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $encryptionPassword, $CRYPT, MCRYPT_MODE_CBC);

$Base64_Encrypted_CRYPT = base64_encode($Encrypted_CRYPT);

echo    "<form action = 'https://test.sagepay.com/gateway/service/vspform-register.vsp' method = 'POST'>

            <input type = 'hidden' name = 'VPSProtocol' value = '3.00' />//
            <input type = 'hidden' name = 'TxType' value = 'PAYMENT' />
            <input type = 'hidden' name = 'Vendor' value = 'vendorName' />
            <input type = 'hidden' name = 'Crypt' value = '" . $Base64_Encrypted_CRYPT . "' />
            <input type= 'submit' value = 'Submit'>

        </form>";

任何帮助深表感谢。


这是 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 文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中的 AES/CBC/PKCS#5 加密算法 的相关文章

  • 数组匹配值过滤器 PHP [重复]

    这个问题在这里已经有答案了 我尝试在数组中搜索 但根本没有得到任何结果 假设我有一个包含一些值的数组 所以当我想搜索它们时 它总是返回 null 不知道为什么 假设这是我的数组 data Array 0 gt Array id gt 122
  • 存储 PHP 数组的首选方法(json_encode 与序列化)

    我需要将多维关联数据数组存储在平面文件中以进行缓存 我偶尔可能会遇到需要将其转换为 JSON 以便在我的 Web 应用程序中使用的情况 但绝大多数时候我会直接在 PHP 中使用该数组 在此文本文件中将数组存储为 JSON 或 PHP 序列化
  • 防止隐藏的输入被更改

    这一直让我压力很大 我有一个隐藏的输入
  • 如何在php中正确显示另一种语言的mysql表数据

    我有一个 mySQL 表 其中一列中的数据采用英语以外的语言 波斯语 当我在表中输入数据时 它会正确显示 但是当我想在 php 文件中显示数据时 它会显示如下 好吧 我应该怎么做才能以正确的形式显示数据 由于我经常使用 非英语 字符 因此要
  • PHP MySQL 查询带有 %s 和 %d

    SELECT COUNT AS test FROM s WHERE id d AND tmp mail lt gt 什么是 s and d for 这些是使用的格式符号 例如经过sprintf 例子 Output SELECT COUNT
  • 将数组数据从 html 表单传递到 php 数组变量

    我有一张表格来记录一组项目的工作时间 该表单使用项目 ID 小时数和注释字段的数组 表单行是项目数量的循环 该表单将数据传递给 PHP 脚本进行处理 PHP 脚本没有看到数组中的值 它只是给我 Array 作为输出 文档和其他示例让我想知道
  • YouTube 数据 api 未按 viewCount 排序

    我正在尝试按 viewCount 从高到低排序 YouTube 频道视频 但结果并不是按最大观看次数排序 以下是我正在使用的 API https www googleapis com youtube v3 search key api ke
  • 通过 PHP 检测 excel .xlsx 文件 mimetype

    我无法通过 PHP 检测 xlsx Excel 文件的 mimetype 因为它是 zip 存档 文件实用程序 file file xlsx file xlsx Zip archive data at least v2 0 to extra
  • PHPMailer:如何将 Content-Type 设置为 multipart/alternative

    我正在使用 phpmailer 发送电子邮件 但消息的标题中带有 Content Type text html 我怎样才能将其更改为多部分 替代 它应该类似于 mail gt 我的配置是 mail new PHPMailer mail gt
  • Woocommerce 中的欧洲 GDPR 附加结帐验证复选框

    您好 我一直在尝试向我的 Woocommerce 结帐页面添加一个额外的条件复选框 该复选框与条款和条件相同 但包含有关新 GDPR 数据保护 的信息以及指向我的隐私政策的链接 他们必须在方框中打勾才能结帐 我一直在使用从此处找到的各种代码
  • 下拉 24 小时选项值和 12 小时显示

    我需要创建一个时间数组 以便在 HTML 下拉列表中使用 数组键应采用 24 小时格式 值应采用 12 小时制 包含 am 和 pm 在数据库中我想存储 24 小时格式 有没有一种快速的方法来创建数组而不是每小时键入 example 00
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • 如果一个多维数组中的子数组与另一个多维数组不同,则覆盖该子数组

    我坚持这个问题 真的不知道如何解决 我有两个多维数组 需要将第二个数组中的每个 entry id 与第一个数组进行匹配 然后需要检查第二个数组中的每个 file no 是否在数据库 第一个数组 中 并且 status 是否与第一个数组匹配
  • 将 PHP 7 安装到我的服务器后,PHP 模块无法加载

    我将 PHP 7 安装到我的服务器上 因此 我没有 etc php5 和 etc php 7 0 当我运行我的网络应用程序时 我看不到任何以前的 CURL 或 fork 起初我收到这个错误消息 消息 调用未定义的函数curl init 安装
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • Php 转换 GMT 格式的时间

    我有这个字符串2012 06 27 16 17 06我想将其转换为 GMT 格式 我怎样才能做到这一点 多谢 Use gmdate http php net manual en function gmdate php 使用以下命令将当前日期
  • 如何使用 php 从字符串中提取日期

    我需要从字符串中提取日期 下面是我的代码和字符串 str Updated status to Masters Software Engineering Enrolled Documents to Send on 03 06 2014 14
  • PHP strtotime() 未返回正确的月份

    由于当前月份 年份是 2012 年 1 月 为什么以下代码返回 2011 年 12 月而不是 2011 年 11 月 echo date F Y strtotime 2 months 如果有影响的话 这是在 PHP 5 3 0 上 要获得您
  • 将字符串分解为标记,保持引用的子字符串完整

    我不知道我在哪里看到它 但是谁能告诉我如何使用 php 和 regex 来完成这个任务 this is a string that has quoted text inside 我希望能够像这样爆炸它 0 this 1 is 2 a 3 s
  • 在 PHP 中设置 HTTP 响应代码(在 Apache 下)

    给出以下两种在 PHP 中设置 HTTP 响应代码的方法 具体来说 在 Apache 下 方法一 http response code 404 方法二 header HTTP 1 0 404 Not Found 我的问题是 除了这个事实之外

随机推荐

  • Jquery中动态选择Drop Down

    我有 4 个下拉菜单 默认情况下 每个 drop 都有一个 select 选项 每个盒子都有一个唯一的 ID 如您所见 如果上面的下拉列表值为 select 则禁用第二个下拉列表 仅当该值不是 select 时才会启用 这是我的代码 doc
  • Java ImageIO.read 导致 OSX 挂起

    我必须在 Mac OSX 上读取图像时执行一些操作 但是在调用 ImageIO read File 时它似乎挂起 似乎也没有出现堆栈跟踪 它实际上只是挂起 想知道其他人是否遇到过这个问题 我已经成功地写了一张图片 只是阅读方面似乎有问题 使
  • C# 中的双向适配器和可插拔适配器模式有什么区别?

    双向适配器和可插入适配器都可以访问这两个类 并且还可以更改需要更改的方法的行为 以下是我的代码 双向适配器 public interface IAircraft bool Airborne get void TakeOff int Heig
  • 即使删除 Entitlements.plist 后,Xamarin 钥匙串错误中也找不到有效的 iPhone 代码签名密钥

    我收到这个错误即使删除 Entitlements plist 后 Xamarin 钥匙串错误中仍发现 iPhone 代码签名密钥当尝试使用 Xamarin Studios 构建 HelloWorld iPhone 应用程序时 我了解在真实设
  • 使用 jemmy 测试 java web start 应用程序

    我需要使用 Jemmy 创建一些 gui 测试 但我不知道如何使用 javaws 应用程序启动它 在教程 示例 等中是这样的 new ClassReference org netbeans jemmy explorer GUIBrowser
  • Python Pickling 字典 EOFError

    我有几个脚本在服务器上运行 用于腌制和取消腌制各种字典 它们都使用相同的基本代码进行酸洗 如下所示 SellerDict open home hostadl SellerDictkm rb SellerDictionarykm pickle
  • Angular 6 不应用 scss 样式

    我有一个组件页面和相应的样式表 但是 component scss 中的类不适用于该页面 没有错误 我仍然想知道为什么 这是我的产品详细信息 page component html div h1 Product Detail Page h1
  • 向 EditText 字段添加阴影效果

    我正在尝试设计一个编辑文本字段像这样有阴影 底部和右侧 尝试谷歌搜索并搜索了许多SO讨论 但所有讨论都是针对TextView而不是EditText 这是我的代码 向输入文本添加阴影 但不向 TextField 添加阴影
  • 使用 urllib2 HTTPS 登录

    我目前有一个小脚本 可以下载网页并提取一些我感兴趣的数据 没什么花哨的 目前我正在下载页面 如下所示 import commands command wget output document quiet http user USER htt
  • 从共享菜单中泄露 IntentReceiver

    我通过在特定活动中单击按钮来打开发送菜单 Intent i new Intent Intent ACTION SEND i setType text plain i putExtra Intent EXTRA TEXT meh try st
  • 什么是合适的数据结构和数据库模式来存储逻辑规则?

    前言 我没有规则引擎 构建规则 建模规则 实现规则数据结构等方面的经验 因此 我不知道我在做什么 也不知道我下面的尝试是否偏离了基础 我试图弄清楚如何存储和处理以下假设场景 为了简化我的问题 假设我有一种游戏类型 用户购买一个对象 其中可能
  • 将 Dictionary 序列化为 BSON 时出现 BsonSerializationException

    我最近搬到了新的 MongoDB C 驱动程序 v2 0 https www nuget org packages MongoDB Driver 2 0 0来自已弃用 v1 9 https www nuget org packages mo
  • 如何在 try catch 语句中重新请求输入

    string l Console ReadLine try int Parse l catch FormatException Console WriteLine Invalid input Please enter 1 2 or 3 正如
  • 在python中将字典的字典写入csv

    我有一本字典 我想将其写入 csv 我的字典看起来像 dict object1 time1 value1 value2 time2 value3 value4 object2 time1 value5 value6 time2 value7
  • 使用 boost 序列化抽象类时出错

    我正在尝试序列化我的数据结构 以便将它们写入 TCP 套接字 到目前为止我发现我的问题是序列化 我什至尝试使用 BOOST SERIALIZATION ASSUME ABSTRACT T 但我找不到任何与我的程序类似的工作示例以及如何正确实
  • Numba 和 numpy 数组分配:为什么这么慢?

    我最近使用 Cython 和 Numba 来加速进行数值模拟的 python 的小片段 起初 使用 numba 进行开发似乎更容易 然而 我发现很难理解 numba 何时会提供更好的性能 何时不会 意外性能下降的一个例子是当我使用该函数时n
  • @Entity 和 @Table 中的名称属性

    我有疑问 因为 Entity 和 Table 中都有 name 属性 例如 我允许 name 属性具有相同的值 Entity name someThing Table name someThing 我也可以为同一个班级使用不同的名字 Ent
  • 如何使用java从cucumber中的场景大纲中获取场景名称

    假设我有一个测试用例 例如 Scenario Facebook login test GIVEN I am a Facebook user WHEN I enter my user name password THEN login shou
  • 从完整 URL 获取域名

    假设有人输入这样的 URL http i imgur com a b c query value query2 value 我想返回 imgur com not i imgur com 这是我现在拥有的代码 sourceUrl parse
  • PHP 中的 AES/CBC/PKCS#5 加密算法

    我正在尝试使用 表单集成 方法将 SagePay 支付网关集成到网站中 基本上 表单集成方法的工作原理是在网页中插入表单 并在选择表单的 提交 按钮时将信息发布到 SagePay 的服务器 在将信息发送到 SagePay 的服务器之前 必须