在查看一些旧的冷融合代码时,我发现了几个使用 CFMX_COMPAT 算法通过加密/解密函数加密的数据实例。
搜索了一段时间后,我一直无法找到这是一种什么样的算法。文档提到它现在是最不安全的方法,但我想知道为什么会这样。
(其他地方的一些人建议它只是 MD5,但这并没有多大意义,因为数据正在被解密。)
在查看一些旧的冷融合代码时,我发现了几个使用 CFMX_COMPAT 算法通过加密/解密函数加密的数据实例。
搜索了一段时间后,我一直无法找到这是一种什么样的算法。文档提到它现在是最不安全的方法,但我想知道为什么会这样。
(其他地方的一些人建议它只是 MD5,但这并没有多大意义,因为数据正在被解密。)
它是一种基于 XOR的算法,但不是教科书式的,因此一揽子 XOR 算法的答案是不正确的(过去错误地应用于这些 CFMX_COMPAT 问题)。
要详细查看此专有 XOR 的源代码,请查看“Compare Password Hashes Between C# and ColdFusion”的答案,其中@Leigh(他也评论了其中一个问题)帮助提供了算法的准确端口,直接从 Railo 源中提取。
这是一个简单的异或算法。从技术上讲,它是加密货币,但它是非常、非常、非常、非常、非常弱的加密货币。我应该在里面多放几个“非常”。
据我了解,明文的每一位都与密钥中的下一个字节进行异或运算,结果是密文。
因此,如果我们逐个查看所有内容:
P: 1 0 1 0 1 0 1 0 0 0 1
克:0 0 1 1 1 0 0 1 0 1 0
C: 1 0 0 1 0 0 1 1 0 1 0
P = 明文
K = 键
C = 密文
如果您不熟悉 XOR,它的工作原理如下:
0 异或 0 -> 0
0 异或 1 -> 1
1 异或 0 -> 1
1 异或 1 -> 0
它绝对不是 MD5,因为那是一种散列算法,而不是一种加密算法(正如你所指出的)。
我不知道它使用什么算法,但你可以反编译 cfusion.jar 中的相关 Java 类并看看。我怀疑有比这更好的发现方法。我怀疑即使您向 Adobe 开一张支持票,他们实际上会告诉您。