【问题标题】:How to hash in CFMX_COMPAT in c#如何在 C# 中对 CFMX_COMPAT 进行哈希处理
【发布时间】:2012-05-23 19:03:40
【问题描述】:

一个现有的coldfusion网站将被转换为点网。

在coldfusion代码中,密码使用hash()函数进行哈希处理,没有算法:

SomePassword = '#hash(fldPassword)#'

找到this document,说默认加密是

CFMX_COMPAT:生成一个与由 ColdFusion MX 和 ColdFusion MX 6.1(默认)。

有一些文章实际上告诉我如何解密。

根据 Macromedia,ColdFusion 加密功能使用 基于 XOR 的算法,利用基于 32 位伪随机密钥的 用户作为参数传递给函数的种子。这 结果数据是 UU 编码的。

您需要先对编码值进行 uudecode http://www.eggheadcafe.com/printsear...asp?linkid=351

然后使用加密的密钥对其进行异或。 http://www.java2s.com/Code/CSharp/La...deamessage.htm

如果你没有钥匙 - 你在浪费时间。

但是,如何使它工作?我不认为有任何关键。我只能看到'#hash(fldPassword)#'。请帮忙。谢谢。

【问题讨论】:

  • 我相信 hash() 被设计为一个不应该被“解密”的单向函数是吗?
  • 有趣,那么为什么 Adob​​e/Macromedia 将其命名为 CFMX_COMPAT 而实际上只是 MD5?
  • @Henry - 听起来像是文档错误。 (当您需要勘误表时,哪里有勘误表?;)MX6 的hash() 默认为MD5 - 而不是CFMX_COMPAT。另外,在以后的版本中,他们会将默认值降低为CFMX_COMPAT 是没有意义的。它甚至不是散列算法..

标签: hash coldfusion cryptography


【解决方案1】:

有一些文章实际上告诉我如何解密。

散列和加密不是一回事。加密可以反转。如果您有正确的密钥等,您可以恢复原始值。而散列是一种单程旅行。一旦散列,就无法恢复原始值。 (嗯......理论上。一些较弱的散列算法已被破坏。)所以你不能“解密”一个散列值。但是你可以复制混淆后的结果字符串。

我找到了这个文档,说默认加密是CFMX_COMPAT

其实是指默认的算法。但是,我不太确定描述是否正确。 (编辑:正如 Rasmus 正确指出的那样,它确实说默认是 MD5)但是,CF9/7 无论如何都默认为 MD5。即使算法是CFMX_COMPAT。因此,无论哪种情况,C# 中的简单 MD5 散列都会给您相同的结果。

ie 这些都产生相同的结果,即098F6BCD4621D373CADE4E832627B4F6。

    #hash("test")#
    #hash("test", "cfmx_compat")#
    #hash("test", "md5")#

【讨论】:

  • 投反对票的请发表评论。鉴于上面的例子证明答案是正确的,我很好奇你认为什么是错的......
【解决方案2】:

如果我正确阅读了文档,CFMX_COMPAT 散列只是 MD5。

所以:

byte[] hash = MD5.Create().ComputeHash(fldPassword);

验证您是否可以访问 ColdFusion 安装应该很容易。

【讨论】:

  • 谢谢。我同时得到了两个正确答案。我奖励了@Leigh,仅仅是因为你已经获得了太高的声誉分数。希望你不要介意。
  • 大声笑,我得到了同情投票;)我本来想说把它交给拉斯穆斯,因为他得到了“默认”的权利,而我没有。所以+1
猜你喜欢
  • 1970-01-01
  • 2018-06-18
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多