将 Coldfusion 加密代码转换为 C#

2023-11-25

我有一个 Coldfusion 页面,其中包含一段加密变量的代码,如下所示:

<cfset data64 = toBase64(key)>
<cfset encryptedID = encrypt(getUser.ID, data64, "BLOWFISH", "Base64")>

我们正在将该网站迁移到基于 .NET 的 CMS,我需要将此页面转换为 C#,但我遇到了麻烦。

我已成功将第一行转换为:

byte[] keyBytes = System.Text.Encoding.UTF8.GetBytes(key);
string keyBase64 = System.Convert.ToBase64String(keyBytes);

我还添加了在以下位置找到的blowfish.cs类https://defuse.ca/blowfish.htm,但我对如何将其与密钥一起使用(以及我是否想使用 ECB、CBC 或 CTR)有点模糊。我也不确定在 Coldfusion 中使用 base64 编码的模拟是什么...这是我目前正在尝试的,它不会产生与原始代码相同的结果:

BlowFish b = new BlowFish(keyBase64);
byte[] idBytes = System.Text.Encoding.UTF8.GetBytes(thisUser["ID"].ToString());
byte[] idBytesEncrypted = b.Encrypt_ECB(idBytes);
string idBase64 = System.Convert.ToBase64String(idBytesEncrypted);

一般来说,我在加密方面没有太多经验,Coldfusion 代码是在另一位没有 C# 经验的开发人员的帮助下设置的。任何建议将不胜感激。谢谢你!


您可能想尝试BouncyCastle C# API。我针对 POC 进行了一些测试,它似乎产生了与您的 CF 代码相同的结果。

需要记住的几件事:如果您阅读ColdFusion 中的强加密它解释了 ColdFusion 默认使用 ECB 模式和 PKCS5Padding。所以在指定简写时Blowfish,你实际上是在说使用Blowfish/ECB/PKCS5Padding。为了在 C#(或任何语言)中复制加密,您必须使用相同的设置。

似乎没有很多关于 C# 端口的文档,但据我所知BlowfishEngine默认为 ECB 模式。所以如果你把它包裹在一个PaddedBufferedBlockCipher结果应该是 PKCS5 填充的。这应该会得到与 CF 代码相同的结果:

    byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(userIDString);
    byte[] keyBytes = System.Convert.FromBase64String(keyInBase64);

    // initialize for ECB mode and PKCS5/PKCS7 padding
    PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new BlowfishEngine());
    KeyParameter param = new KeyParameter(keyBytes);
    cipher.Init(true, param);

    // encrypt and encode as base64
    byte[] encryptedBytes =  cipher.DoFinal(inputBytes);
    string idBase64 = System.Convert.ToBase64String(encryptedBytes);

NB:我不是加密方面的专家,但会说不鼓励使用“ECB”模式。看wiki 很好地说明了原因。所以你应该认真考虑选择不同的模式.

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

将 Coldfusion 加密代码转换为 C# 的相关文章

随机推荐

  • Slim 3 自动装载机

    我是 slim 框架的新手 不知道如何使用自动加载器来自动加载我的类 我创建了一个app models myclass php但当然 当我尝试使用它时 我发现找不到课程 我不确定哪种是自动加载类的正确方法 或者我应该使用的命名约定 我应该通
  • Spring Boot 2.2.2.RELEASE 中集成测试隔离失败(每次 SpringBootTest 后删除表时出错)

    我们的应用程序正在 2 0 4 版本中运行 升级到 2 2 2 RELEASE 后 我们看到集成测试失败 我怀疑存在一些配置错误 并且每个集成测试本身都不会清理 或者存在以前不存在的额外初始化 我真的不知道如何正确修复它 再具体一点 每个测
  • 如何通过 REST 查询 SQL Server 来获取 XML

    我们一直在使用 Web 应用程序框架来构建需要能够查询 SQL Server 数据库并获取 XML 形式的结果的应用程序 过去 框架提供了这种能力 但该功能现已被弃用 所以我们在想 该框架允许我们轻松地通过 HTTP 查询 REST 服务
  • 禁用 xampp 将 http 重定向到 https

    我在 localhost 中的 xampp 上为 wordpress 创建了 VirtualHost 并在 httpd vhosts conf 中添加了以下代码
  • 在 Linux 上用 python 监听全局组合键

    我刚刚写了一个小程序 每隔几分钟从 flickr 下载一张新壁纸 现在我想添加 喜欢 壁纸的功能 因此它会比不喜欢或不喜欢的壁纸更频繁地出现 我想为此函数分配一个全局键盘快捷键 例如 如果我按 ctrl 7 它将在 Python 中执行某种
  • Tensorflow尝试使用未初始化的值AUC/AUC/auc/false_positives

    我正在训练用于图像分类的 CNN 由于我的数据集大小有限 我正在使用迁移学习 基本上 我使用的是谷歌在其重新训练示例中证明的预训练网络 https www tensorflow org tutorials image retraining
  • Git重置=致命:无法读取树

    有人在错误的分支上提交了所以我尝试将提交移动到另一个分支 当我尝试回滚提交时 出现以下错误 user server gitrepo git reset hard 9c2de3c0 fatal unable to read tree 9c2d
  • 如何在使用 Android API Level 15 的同时保持向后兼容性?

    冰淇淋三明治引入了很多新的UI设计元素 但市场渗透率仍然只有4 左右 如果您想使其应用程序面向未来 并利用 Honeycomb Ice Cream Sandwich 引入的一些设计元素 例如操作栏 配色方案等 那么确保您保持一定程度的落后的
  • Highgui 和 ruby

    我需要编写一个简单的项目 我正在使用 opencv ruby 和 mac 我通过brew安装了opencv 通过gem install安装了rb webcam coding utf 8 require opencv require rb w
  • .htaccess 用于 SEO 机器人在没有 hashbang 的情况下抓取单页应用程序

    Using a pushState启用页面 通常您使用重定向 SEO 机器人escaped fragment习俗 您可以阅读更多相关内容here 该约定假设您将使用 hashbang 前缀位于单页应用程序上所有 URI 之前 SEO 机器人
  • 按 R 中的因素过滤数据框

    我有以下数据框 sp lt combn c sp1 sp2 sp3 sp4 2 d lt data frame t sp freq sample 0 100 6 和两个因素 x1 lt as factor c sp1 sp2 x2 lt a
  • 如何在 C# 中创建包含多种尺寸/图像的图标文件

    如何创建包含多种尺寸的图标文件 我知道我使用位图创建了一个图标Icon FromHandle 但如何向该图标添加另一个图像 尺寸 Edit 我需要在我的应用程序中执行此操作 因此我无法执行外部应用程序来进行组合 我正在寻找一种将 png 文
  • CSS中按属性选择元素

    是否可以通过 HTML5 数据属性来选择 CSS 中的元素 例如 data role 如果你的意思是使用属性选择器 当然 为什么不呢 data role page Styles 有多种属性选择器可用于各种场景 我链接到的文档中均涵盖了这些选
  • 插入约 5000 行时,核心数据 sqlite-wal 文件变得巨大(>7GB)

    我正在将数据导入 Core Data 并发现保存操作很慢 使用 iOS 模拟器 我观察 sqlite wal 文件不断增长 直到其大小超过 7GB 我正在导入大约 5000 条记录 其中包含大约 10 个字段 这并不是很多数据 我插入的每个
  • 合并不重叠的数组块

    我使用此函数将 512x512 二维数组划分为 2x2 块 skimage util view as blocks arr in block shape array 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  • BOOST_CHECK 无法编译自定义类型的运算符 <<

    我写了这个非常简单的类 以便清楚我的问题是什么 class A public int x A int y x y bool operator const A other const return x other x 现在 如果我定义 A f
  • 格式正确的乘法口诀表

    我如何制作一个组织成整齐表格的乘法表 我当前的代码是 n int input Please enter a positive integer between 1 and 15 for row in range 1 n 1 for col i
  • C++ 中的结构体可以有构造函数吗?

    Can a structC 中有构造函数吗 我一直在尝试解决这个问题 但我没有得到语法 在 C 中 a 之间的唯一区别class and a struct问题在于 成员和基类在类中默认是私有的 而在结构中默认是公共的 因此结构可以有构造函数
  • Maven cobertura 插件 - 多模块项目的一份报告

    我正在使用 Maven cobertura 插件来报告我的多模块项目中的代码覆盖率 问题是我不知道如何为项目中的所有模块生成一份报告 到目前为止 我已经为每个模块生成了单独的报告 但如果能为整个项目提供一份报告那就太好了 我的父pom配置
  • 将 Coldfusion 加密代码转换为 C#

    我有一个 Coldfusion 页面 其中包含一段加密变量的代码 如下所示