AES 在 CryptoJS 中加密并在 Coldfusion 中解密

2024-01-30

我们有一个用 Coldfusion9 编写的静默登录服务,它接受来自外部系统的加密字符串,然后根据商定的算法/编码设置进行解密。多年来,这在运行 ASP/JAVA/PHP 的系统上一直没有问题,但我们现在有一个客户别无选择,只能使用 CryptoJS 来执行加密,我一生都无法弄清楚为什么这不起作用在 Coldfusion 中解密。

我对加密的了解并不出色,但我注意到的是,每次执行加密时,完全相同的字符串/密钥的 CryptoJS 加密密文都会有所不同,而在 Coldfusion/Java 中,我总是可以期望完全相同的加密字符串。我不确定这是否与编码相关,但我以前从未遇到过从任何其他系统接受加密字符串的问题,所以我希望这是我在 CryptoJS 中加密的方式不正确。

<cfoutput>

<!--- Set String and Key --->
<cfset theKey = toBase64("1234567812345678")>
<cfset string = "[email protected] /cdn-cgi/l/email-protection">

<!--- CryptoJS AES Libraries --->
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>

<script>

// Encrypt String using CryptoJS AES
var encrypted = CryptoJS.AES.encrypt("#string#", "#theKey#");
console.log(encrypted.toString());

// Decrypt String using CryptoJS AES 
var decrypted = CryptoJS.AES.decrypt(encrypted, "#theKey#");
console.log(decrypted.toString(CryptoJS.enc.Utf8));

</script>

<!--- Coldfusion Decrypt String / FAILS --->
Decrypted: #decrypt(encryptedEmail, "#theKey#", "AES", "BASE64")#

</cfoutput>

似乎有两个问题:

  1. CryptoJS 没有使用你的变量作为key。正如@Miguel-F 提到的,当你传入一个字符串时,“它被视为密码并用于派生实际密钥和 IV” https://code.google.com/p/crypto-js/#The_Cipher_Input。两者都是随机生成的,这就是您的加密结果不断变化的原因。但更重要的是,这意味着 CryptoJS 使用的是完全不同的key比你的CF代码中的那个要大,这就是decrypt()失败的原因。 (至少是部分原因……)

  2. 第二个问题是,除了算法“AES”之外,还有两个其他加密设置必须匹配:mode http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation and 填充方案 http://en.wikipedia.org/wiki/Padding_%28cryptography%29。虽然 CryptoJS 和 ColdFusion 使用相同的默认填充方案,但“模式”不同:

    • ColdFusion 使用“ECB” http://helpx.adobe.com/coldfusion/kb/strong-encryption-coldfusion-mx-7.html。 “AES”实际上是缩写"AES/ECB/PKCS5Padding"
    • CryptoJS 使用“CBC”,这需要额外的iv (初始化向量 http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Initialization_vector_.28IV.29) value.

您需要确保两侧的所有三个设置都相同。尝试在 CF 中使用 CBC 模式,因为无论如何它比 ECB 更安全。注意:需要添加IV值。

CF Code:

<!--- this is the base64 encrypted value from CryptoJS ---> 
<cfset encrypted = "J2f66oiDpZkFlQu26BDKL6ZwgNwN7T3ixst4JtMyNIY=">
<cfset rawString = "[email protected] /cdn-cgi/l/email-protection">
<cfset base64Key = "MTIzNDU2NzgxMjM0NTY3OA==">
<cfset base64IV = "EBESExQVFhcYGRobHB0eHw==">

<cfset ivBytes = binaryDecode(base64IV, "base64")>
<cfoutput>
    #decrypt(encrypted, base64Key, "AES/CBC/PKCS5Padding", "base64", ivBytes)#
</cfoutput>

CryptoJS:(调整后的原始示例)

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>
<script>
    var text = "#rawString#";
    var key = CryptoJS.enc.Base64.parse("#base64Key#");
    var iv  = CryptoJS.enc.Base64.parse("#base64IV#");

    var encrypted = CryptoJS.AES.encrypt(text, key, {iv: iv});
    console.log(encrypted.toString());

    var decrypted = CryptoJS.AES.decrypt(encrypted, key, {iv: iv});
    console.log(decrypted.toString(CryptoJS.enc.Utf8));
</script>

Edit:

综上所述,您所说的客户是什么意思“别无选择,只能使用 CryptoJS 来执行加密”?为什么他们不能使用服务器端加密?我不是加密专家,但在javascript中进行加密,并且在客户端公开密钥,一开始听起来不太安全......

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

AES 在 CryptoJS 中加密并在 Coldfusion 中解密 的相关文章

  • 如何恢复文本框数据

    我有一个小小的要求 我们已经恢复了之前清除的文本框数据 下面是我的 HTML 代码 table tr td td tr table
  • 如何使用多个 select2 框过滤表格?

    我正在尝试使用 和多个 select2 框的类来过滤表格 表格 HTML table class table tbody tr class kanban event Austin td td tr tr class csm event Ch
  • 在节点环境中存根 jQuery.ajax (jQuery 2.x)

    我正在尝试运行一些需要存根的测试jQuery ajax 我正在使用 SinonJS 来做到这一点 它曾经与旧版本的 jQuery 1 x 一起工作得很好 var require jquery var sinon require sinon
  • 获取被调用的 javascript 文件的查询字符串

    是否可以在调用的 javascript 文件上使用 javascript 获取查询参数 如下所示 in html in file js console log this location query 这是否可能以某种方式实现 或者我必须使用
  • 在上传之前预览图像 VUEjs [重复]

    这个问题在这里已经有答案了 我知道这个问题已经被问过 但我不知道如何在vuejs中使用代码 我尝试了很多但没有任何结果 我还添加了我的代码 有人可以帮帮我吗 这是我的代码 谢谢 html
  • jQuery:查找具有特定自定义属性的元素

    我只想找到具有特定自定义属性值的元素 例如 我想找一个div其具有属性data divNumber 6 var number 6 var myDiv data divNumber number 我尝试使用http api jquery co
  • Javascript 将对象推送为克隆

    我将 d3 用于交互式网络应用程序 我需要绑定的数据在交互过程中发生变化 并且由 JSON 变量中的一些选定对象组成 为此 我在 JSON 变量上使用了映射 并进行了一些查询来选择适当的对象 对象被推送到列表中 并且该列表被绑定为新数据 我
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • Javascript 作为对象键的函数与块中标记函数之间的语法冲突

    假设您有一个支持两者的浏览器带标签的函数声明 https developer mozilla org en US docs Web JavaScript Reference Statements label Labeled function
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • H2数据库:如何进行加密保护,而不暴露文件加密密钥

    我们在服务器模式下使用Java H2数据库 因为我们不希望用户访问数据库文件 为了对数据库文件添加更多保护 我们计划使用 AES 加密 将 CIPHER AES 添加到数据库 URL 以防存储被盗 但是 每个用户在连接时还需要提供文件保护密
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • 可以禁用幻灯片的触摸模拟但不能禁用滚动条(危险的滑动器)吗?

    我的页面上有一个危险的滑动器 它成功地模拟了幻灯片和随附滚动条上的触摸事件 允许单击鼠标并移动以向左或向右滑动幻灯片 这很好 但我现在在滑动器内的幻灯片上调用了可拖动 这意味着我需要停止此触摸模拟 拖动幻灯片并同时移动它们会引起混乱 但仅限
  • Angular2:动态同步http请求

    Goal 发出一系列同步 http 请求并能够将它们作为一个可观察流进行订阅 示例 不工作 let query arr test1 test2 test3 function make request query arr if query a
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • Google 地图 API - 地图未显示 - 没有错误

    我正在尝试将地图从 Google API 加载到 div 中 但是 地图未加载 并且没有输出任何错误 这是代码 google maps var geocoder map function codeAddress address geocod
  • React Redux - 在辅助函数中访问现有存储

    我试图在反应组件之外获取存储实例 存储状态 即在单独的辅助函数中 我有我的减速器 我的动作 我在最上面的组件中创建了一个商店 configStore js import createStore from redux import gener
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询

随机推荐

  • 如何删除fiddler安装的根CA证书

    Fiddler 有助于添加唯一的根 CA 证书来拦截 HTTPS 流量 添加此证书后 如何删除它 两种方式之一 1 禁用 HTTPS 解密并单击标题为 删除拦截证书 的按钮 2 打开 CertMgr msc 打开个人和受信任存储 然后使用根
  • 以编程方式复制 WPF 控件

    我有一个选项卡控件 当用户想要添加到它时 我想复制几个已经存在的元素 而不仅仅是引用它们 现在 到目前为止我只是硬复制了我想要的变量 但我在自动调整大小代码中出现了裁剪器 也就是说 在调整窗口大小时 复制的元素明显落后于原始元素 此外 随着
  • HTML5 视频暂停时显示海报图像或暂停按钮?

    您好 我正在为 iPad 编写一个本地网站 并且有一个没有控件的视频 点击时会播放和暂停 视频暂停时能否显示海报图片 或者在中间显示一个暂停按钮 这是我用于播放和暂停的代码
  • Pandas - Groupby 数据帧存储为数据帧而不聚合

    我是 Pandas 的新手 我在这里阅读了很多文档 帖子和答案 但我一直无法辨别出实现我的目标的好策略 抱歉 如果它已经得到解答 我找不到它 这是我所拥有的 df key A B A B value 2 2 1 1 df pd DataFr
  • Django 有办法打开 HTTP 长轮询连接吗?

    保持连接打开 直到事件发生 看一下姜戈 彗星 推 万恶之中最小的 https stackoverflow com questions 4310706 django comet push least of all evils or Pytho
  • 如何在 Android 上使用带有 c 和 java api 的库项目

    我在谷歌 android ndk 组中问过这个问题 但没有得到任何答案 我正在尝试通过单击在独立项目中构建通用模块 是图书馆 是日食 该项目同时提供c api 和java api 虽然其中一些 api 是相关的 这意味着将它们分开不是一个好
  • 如何简单地将数据帧的两列相乘? [复制]

    这个问题在这里已经有答案了 我的输入是 a lt c 1 2 3 4 b lt c 1 2 4 8 df lt data frame cbind a b 我的输出应该是 a lt c 1 2 3 4 b lt c 1 2 4 8 d lt
  • 在 Visual Studio 本地使用假域名,无需直接修改主机文件

    我有一个在这里运行的应用程序http 本地主机 10205 http localhost 10205 但我需要它在本地运行http somethingelse com http somethingelse com 这也需要在其他计算机上进行
  • 有没有办法在 Windows 中的 basic_iostream 上获得非锁定流插入/提取?

    我是一名 C 开发人员 主要在 Solaris 和 Linux 上进行编程 直到最近我被迫创建一个针对 Windows 的应用程序 我一直在使用基于 TCP 套接字支持的 C I O 流的通信设计 该设计基于单个线程连续从流中读取 大部分时
  • 将一个单词转换为另一个单词的最短路径

    对于数据结构项目 我必须找到两个单词之间的最短路径 例如 cat and dog 一次仅更改一个字母 我们得到了一个拼字游戏单词列表 用于寻找我们的路径 例如 cat gt bat gt bet gt bot gt bog gt dog 我
  • Cakephp 在 HABTM 关系中保存额外的属性

    我有三个模型主题 颜色和主题颜色 映射具有不同颜色的主题 结构如下 主题 id 名称 属性 图像 颜色 ID 名称 代码 图像 ThemeColor 主题id 颜色id 预览 例如 预览 gt x 主题 具有 a b c 颜色及其相关图像
  • 如何在asp.net中显示HTML表格中的数据

    我正在编写一个 ASP NET 页面 它从数据库读取数据并需要将其显示在 HTML 表中 我不想使用 gridView 这是我尝试使用 c 的代码 protected void Page Load object sender EventAr
  • ASP.NET 2.o 页面的 jQuery 登录模式弹出窗口

    我有一个 ASP NET 网页 不是 MVC HomePage aspx 和另一个页面 PRiceList aspx 我的主页中有一个登录功能 因此 当用户登录该网站时 他们可以转到Pricelist aspx 页面可以轻松地使用主页中的链
  • 在mlr和parallelMap中可以并行化多个级别吗?例如 mlr.tuneParams 和 mlr.benchmark

    我正在使用多个学习器 大约 15 个不同的学习器 运行 mlr 基准测试 并使用 irace 调整控件进行嵌套重采样 我的问题是 是否可以在parallelMap 上运行两个并行化级别 如果我使用 mlr benchmark 级别 则速度更
  • MS-SQL 中是否有等效的“START AT”?

    一些数据库支持以下命令 SELECT TOP 10 START AT 10 FROM table 本质上 我需要提取前 10 条记录 然后是下 10 条记录 然后是下 10 条记录 等等 也许还有另一种方法可以做到这一点 但在过去 我对支持
  • 添加类型参数约束以防止抽象类

    如果抽象类的具体实现没有默认构造函数 是否可以将类型参数限制为这些具体实现 例如 如果我有 public abstract class Animal private Animal public Animal string name publ
  • Android 视图在某些设备上的边框问题

    已解决的主题 回答如下 一些用户报告了某些 Android 组件 例如警报弹出窗口或 editTexts 的边框对齐问题 这种情况发生在 Samsung Galaxy Apollo 200x400 和 HTC Pro Touch 480x6
  • 如何使用 C# 从安全令牌获取信息

    我需要让我的应用程序的用户能够使用他们的个人 USB 安全令牌签署批准 我已成功签署数据 但无法获取谁的令牌已用于执行此操作的信息 这是我到目前为止的代码 CspParameters csp new CspParameters 1 Safe
  • 如何在不获取空对象的情况下进行 JSON.stringify 和 JSON.parse?

    我问这个问题的原因是因为我想为我的对象使用 LocalStorage 您可能知道 使用 LocalStorage 时 您必须对对象进行 JSON stringify 然后将它们解析回 javascript 对象 我正在尝试使用方法 JSON
  • AES 在 CryptoJS 中加密并在 Coldfusion 中解密

    我们有一个用 Coldfusion9 编写的静默登录服务 它接受来自外部系统的加密字符串 然后根据商定的算法 编码设置进行解密 多年来 这在运行 ASP JAVA PHP 的系统上一直没有问题 但我们现在有一个客户别无选择 只能使用 Cry