使用 ColdFusion 加密 SagePay 表单

2024-01-23

我正在尝试使用 ColdFusion 10 遵循 SagePay 3.00 中加密字段的规范。

要求是使用提供的密码作为密钥和初始化向量,在 CBC 模式下使用 PKCS#5 填充将字符串加密为 AES(块大小 128 位),并将结果编码为十六进制。

导致问题的是“使用提供的密码”。

此刻我有

myStr = 'assortednamevaluepairsetc';
providedPassword = 'abcdefghijklmnop';
myCrypt = Encrypt(myStr,providedPassword,'AES/CBC/PKCS5Padding','HEX',providedPassword,1);

但这不起作用,因为 SagePay 给我的值会导致错误 - “指定的密钥不是此加密的有效密钥:无效的 AES 密钥长度”,因为它只有 16 个字符长

根据CF文档,您需要使用generateSecretKey来保证AES的密钥长度,所以我尝试过这个,但尽管它给出了结果,但就加密而言这不是正确的结果

myStr = 'assortednamevaluepairsetc';
providedPassword = 'abcdefghijklmnop';
mySecret = GenerateSecretKey('AES');
myCrypt = Encrypt(myStr,mySecret,'AES/CBC/PKCS5Padding','HEX',providedPassword,1);

对此的任何帮助都深表感谢。


使用generateSecretKey来 保证 AES 的密钥长度

该函数仅在您需要生成完整的new加密密钥。你已经有一个了。主要目的generateSecretKey是为了确保你生成一个强加密密钥,即足够随机 http://en.wikipedia.org/wiki/Encryption_key#Key_choice.

不起作用,因为 SagePay 给我的值会导致 错误 - “指定的密钥不是此加密的有效密钥:无效 AES 密钥长度”,因为它只有 16 个字符长

密钥长度为16 bytes(即128位) http://helpx.adobe.com/coldfusion/kb/strong-encryption-coldfusion-mx-7.html对于 AES 来说是可以接受的。问题是加密() https://wikidocs.adobe.com/wiki/display/coldfusionen/Encrypt期望“钥匙”是base64 http://en.wikipedia.org/wiki/Base64编码字符串,比普通字符串长约百分之三十三。当您调用 encrypt(..) 时,CF 将提供的“key”字符串解码为字节,即本质上是这样做的:

  <cfset keyBytes = binaryDecode(yourPassword, "base64")>
  <cfoutput>length = #arrayLen(keyBytes)# bytes</cfoutput>

由于您的密码字符串不是 Base64 编码的,因此生成的密钥长度太小,即 (12) 而不是 (16) 字节。因此出现错误消息。

解决办法是先进行base64编码。How你这样做取决于字符串的编码。听起来这只是一个纯文本字符串 https://stackoverflow.com/a/19950708/104223(希望一个足够随机的... http://en.wikipedia.org/wiki/Encryption_key#Key_choice)。如果是这样,请使用字符集解码 http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f64.html从相关字符集(即 utf-8 等)解码字符串,然后二进制编码 http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f65.html转为base64:

  <cfset keyIVBytes = charsetDecode(yourKeyString, "utf-8")>
  <cfset base64Key = binaryEncode(keyIVBytes, "base64")>

另外,iv参数应该是二进制的。自从key and iv是相同的,只需使用上一步中的字节数组即可。另外,删除iterations参数,因为它不适用。通过这些更改,它应该按预期工作:

 encrypt(myStr, base64Key,"AES/CBC/PKCS5Padding", "hex", keyIVBytes)

注意:我不是加密专家,但是......使用密钥作为 iv 是这不是一个好主意 http://en.wikipedia.org/wiki/Initialization_vector...可能想与他们核实一下是否还有其他选择。

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

使用 ColdFusion 加密 SagePay 表单 的相关文章

  • 在 iOS 中保存加密密钥的安全方法

    在我的 iOS4 应用程序中 我在多个地方使用 AES 加密 整个应用程序必须非常安全 为了做到这一点 我必须在这个应用程序中硬编码几个密钥 然后当我需要加密某些东西时随机选择这些密钥 我的问题是如何存储这些私钥 使用硬编码它们是否安全NS
  • 使用 C# 计算 HMACSHA256 以匹配支付提供商示例

    对于支付提供商 我需要使用 HMAC SHA256 计算基于哈希的消息身份验证代码 这给我带来了很大的麻烦 支付提供商以伪代码形式给出了两个正确计算验证码的示例 所有密钥均为十六进制 Method 1 key 57617b5d2349434
  • 在 Android 中打开受密码保护的 ZIP?

    有没有一个库或一个简单的方法如何在 Android 中打开受密码保护的 ZIP 存档 我知道 ZIP 加密有不同类型 我想打开最简单的一个 在 Unix 中使用以下命令创建zip e命令 可以在 Windows 中打开相同的文件 将要求输入
  • Java 到 ruby​​ AES/ECB/PKCS5Padding 加密

    我有一个使用第三方支付门户的在线电子商务网站 支付门户一直运行良好 直到第三方支付门户要求每个人开始使用带有其他支付参数的哈希密钥 现在的问题是第三方支付门户只提供了一页文档来实现哈希密钥 这是提供的文档 加密演算法 为了减少数据传输和发布
  • 健全性检查 SSH 公钥? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已要求用户提供他们的公共 id rsa pub ssh 密钥 然后将其放入 home theiraccount ssh authorized key
  • 许可证密钥模式检测? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这不是真实情况 请忽略您可能认为适用的法律问题 因为它们并不适用 假设我有一组 200 个已知的有效许可证密钥 用于假设的软件许可算法
  • ECB、CBC、CFB哪种加密模式

    我的 php 脚本和 c 应用程序将相互传递一个 32 个字符长的哈希字符串 最佳模式是什么 我想到了 ECB 但我不确定 因为它说如果使用超过 1 个区块就不要使用 我如何知道该块有多大 他们偶尔会传递一个大文本文件 这将是加密此 CBC
  • iOS:获取 iPhone 密码以生成用于加密的对称密钥

    我正在开发一个 iOS 应用程序 该应用程序分发到所有用密码锁定的设备 有没有办法获取设备密码 或其某种形式 来动态生成对称密钥 例如使用 PBKDF2 来加密 解密数据 否 没有 API 可以确定是否设置了设备密码或获取密码 如果已设置
  • 如何在 ColdFusion 中获取字符串的内容减去扩展名?

    例如 我只想要字段中文件的 文件名 假设我有 myimage jpg 我只想显示 myimage 我怎样才能得到它 使用列表功能对您有利
  • 在节点上生成 AES 密钥

    我正在处理一个使用自定义协议来加密通信的遗留应用程序 随机 AES 密钥在旧版 Java 应用程序中生成 如下所示 keygen KeyGenerator getInstance AES keygen init 128 keygen gen
  • 来自公共字符串的 Android RSA 加密

    我正在开发一个 Android 应用程序 我希望用户能够使用其他人的公钥加密消息 系统将生成公钥 私钥对 然后可以将消息秘密发送给其他用户 我正在创建一个加密类 它将处理消息的加密 解密 不幸的是我遇到了一些问题 在这种方法中 我想传递用户
  • RequestDispatcher.forward 到媒体文件?

    我最近有一个需要解决的问题 https stackoverflow com questions 19385223 how to transparently stream a file to the browser并找到了一个解决方案 但如果
  • 在java中使用共享密钥加密/解密?

    我有客户令牌 我正在从一个 Web 应用程序 如 app1 发送到另一个 Web 应用程序 如 app2 我想加密客户令牌 在 app1 上 并使用在 app1 和 app2 上共享的密钥在 app2 上对其进行解密 我不知道如何开始 这将
  • 如何编写凯撒密码 Python

    我不知道如何开始编写程序 input input Input the text you would like encrypted def cipher text letter code for i in input number code
  • 在同步函数中使用 javascript `crypto.subtle`

    在javascript中 是否可以使用浏览器内置的sha256哈希 https developer mozilla org en US docs Web API SubtleCrypto digest Converting a digest
  • 如何将pgp私钥传输到另一台计算机? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 I read 本文 http www robertsosinski com 2008 02 18 working with pgp and mac o
  • AES 会话密钥的 RSA 解密失败,并显示“AttributeError:‘bytes’对象没有属性‘n’”

    我正在努力在 Python 3 6 上从 PyCryptodome 实现公钥加密 当我尝试创建对称加密密钥并加密 解密变量时 一切正常 但是当我引入 RSA 和 PKCS1 OAEP 的那一刻 一切就都顺理成章了 session key加密
  • 严重: getRealPathFromConn 错误

    目前我正在调试我们的应用程序中一个看似随机的错误 我将尽力提供尽可能多的细节 基本上一段时间后 我们服务器上某个应用程序的应用程序池就会停止 我必须启动它 或者有时重新启动 Coldfusion 或更糟糕的是机器才能再次运行 服务器日志表明
  • Java 9:AES-GCM 性能

    我进行了一个简单的测试来测量AES GCM https en wikipedia org wiki Galois Counter Mode表现在Java 9 通过在循环中加密字节缓冲区 结果有些令人困惑 本机 硬件 加速似乎有效 但并非总是
  • IOS 上图像的加密/解密

    我们正在使用加密 解密和 UIIMAGE 如果我们加密和解密 UIIMAge 而不保存到 iphone 画廊中 它工作正常 但如果我们加密 保存到画廊中 将 加密的图像 加载到应用程序中 然后解密它效果不好 我们使用这个函数来加密 解密 保

随机推荐

  • TypeScript - 将动态属性名称传递给子级

    我正在开发一个带有嵌套路由的路由库 我试图定义一个推断父路径的子处理函数 原因是我有另一种类型 可以从字符串推断动态路径参数 例如 users id to id string 因此 我希望能够将推断的路径参数从父路由传递到每个子路由处理函数
  • 使用 Jasmine 在 Angular 5 中进行单元测试模型绑定

    我正在尝试编写一个单元测试来测试从组件方法调用返回的 JSON 数据是否成功绑定到打字稿模型 我的模型如下所示 export interface IPlayerAccount playerId number name string phon
  • 如何从 TFS 源代码管理中排除特定文件

    我们有多个配置文件 app DEV config app TEST config 等 和一个将正确的配置文件复制到 app config 的预构建事件 显然 配置特定文件位于源代码管理中 但目前 App Config 也是如此 但不应该如此
  • 从后台工作程序中的循环更新文本框

    我知道这个问题有人问过 至少从我到目前为止在这里发现的情况来看 但我无法真正理解它 已经尝试过 msdn 的示例 但仍然没有成功 这是我想要做的 我有一个连接到 TLL 标尺的 USB 计数器 我想在循环中不断读取值并将读数写入文本框而不阻
  • 如何从方法返回对对象的 const 引用? [复制]

    这个问题在这里已经有答案了 public Item getItem ulong itemId Item item items itemId return item 现在的问题是 被调用者getItem必须能够检索以下信息item持有 但不修
  • 多处理代码重复运行

    所以我希望使用 python 多处理模块创建一个进程 我希望它成为更大脚本的一部分 我还想从中得到很多其他东西 但现在我会满足于此 我从以下位置复制了最基本的代码多处理文档 https docs python org 3 6 library
  • 在 ExtJS 4 中具有相同视图并多次存储的最佳实践

    我想在 ExtJS 应用程序中同时拥有不同商店的同一视图的不同实例 目前 我在视口中创建了同一视图 Ext view View 的多个实例 但是在每个视图中都有不同的商店的最佳实践是什么 我发现的每个示例都在使用控制器的stores Con
  • MapKit (Swift 4) Xcode 9.2 - “无法从角 4 插入合法归属”

    我正在做一个处理 MapKit 的项目 我的问题是 当我运行该应用程序时 我收到 无法从第 4 角插入法律归属 的消息 错误 我可以采取什么解决方案来解决这个问题 error https i stack imgur com jw7rk pn
  • 使用 Tf Estimator 时如何获得可训练变量计数?

    我使用 tf 估计器框架创建了 CNN 分类器模型 但是 我无法访问模型中定义的变量 tf trainable variables 始终返回 0 如何使用 tf 估计器访问变量 特别是 我如何获得参数总数的计数 将所有变量的维度相加 谢谢
  • 自动使用相对于函数调用位置的 __LINE__ 和 __FILE__

    我有一个函数log text 这一切所做的就是写 text到数据库 我想包括 LINE and FILE 但不想像我现在那样每次都将其作为参数包含在内 function log text file null line null write
  • 无法使用面向 x64 的 VC++/VS2010 进行编译:LNK1158:无法运行 cvtres.exe

    作为一名 C 开发人员 我最近决定尝试编写一些 C 程序 主要是因为我发现了一个我想使用的有趣的 C API 几天前我写了一个非常简单的程序 在 x64 目标平台上编译它 运行它 一切都很顺利 然而 昨天我更改了一些代码 尝试编译它 但链接
  • ruby - 捆绑包安装/更新太慢

    我刚刚在 virtualbox 中运行的虚拟 ubuntu 12 04 32 位上安装了 RVM Ruby Rails 等 现在我遇到了我的第一个 Rails 项目的问题bundle install or bundle update需要很长
  • 连接到不存在的 mongodb 服务器不会抛出异常

    我正在尝试使用 Java 的 MongoDB 驱动程序 所以我只是创建了一个简单的应用程序来连接到 MongoDB 服务器并选择一个数据库 所以我创建了一个实例MongoClient并选择了一个 数据库 try MongoClient cl
  • 查找哪一行重复 data.frame 中的哪一行

    我有一个像这样的数据框 data frame matrix c 11 13 21 23 11 13 11 13 31 33 41 43 31 33 byrow TRUE ncol 3 现在我想知道哪一行是哪一行的重复项 返回具有重复行号最低
  • 将 docx 转换为 markdown 时如何避免 markdown 上的 img 大小标签?

    我正在使用 pandoc 1 16 0 2 转换 docx 文件 一切都很好 除了每个图像之后 尺寸属性在 teh 中显示为文本 media media image4 png width 3 266949912510936in height
  • 我将错误的数组长度传递给了函数。为什么我没有收到错误消息?

    我是初学者 学习c语言大约20天 我一直在使用 Youtube 来做这件事 我看到一个视频 其中有人告诉我 如果将数组传递给函数 那么第二个变量应该是数组的长度 我觉得这是不对的 我尝试了下面给出的代码 include
  • 如何使用 SSMS 连接到 SQL Server CE 文件

    我正在使用 SSMS 2012 并尝试连接到 Orchard 创建的 SDF 根据这个答案 https stackoverflow com a 1072324 128217 我应该能够选择SQL Server 精简版 as the 服务器类
  • F# 中最优雅的冒泡排序方式是什么?

    F 中最优雅的冒泡排序方式是什么 UPDATE 正如其中一个答案所指出的 冒泡排序在函数式语言中一开始就效率不高 一位幽默愤世嫉俗的评论者还指出 冒泡排序仅适用于列表很小且无论如何都已排序的情况 不过 我很好奇如何在 F 中编写巧妙的冒泡排
  • React Native 中最新的 doctor 命令的目的是什么

    我正在查看最新的 React Native 博客 其中他们介绍了 React Native 的 doctor 命令 从那里我唯一能理解的是为你做一些环境方面的事情 但我不明白目的 确切的目的是什么doctor反应本机命令 The docto
  • 使用 ColdFusion 加密 SagePay 表单

    我正在尝试使用 ColdFusion 10 遵循 SagePay 3 00 中加密字段的规范 要求是使用提供的密码作为密钥和初始化向量 在 CBC 模式下使用 PKCS 5 填充将字符串加密为 AES 块大小 128 位 并将结果编码为十六