2012-12-21 50 views
4

在回顧一些舊的coldfusion代碼時,我發現有幾個數據實例通過加密/解密函數使用CFMX_COMPAT算法加密。ColdFusion的CFMX_COMPAT加密算法

搜索了一會兒後,我一直無法找到這是什麼樣的算法。文檔提到它現在是最不安全的方法,但我想知道爲什麼。

(一對夫婦的人elesewhere表明,它只是MD5,但這並不會讓很多的意義,因爲數據被解密。)

+2

FWIW:同意它絕對*不* MD5。 (我懷疑這種印象來自[hash](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7c52.html),它誤導性地陳述了默認算法'CFMX_COMPAT'「產生一個散列字符串與ColdFusion MX和ColdFusion MX 6.1生成的字符串相同「,這並不意味着」CFMX_COMPAT「和」md5「是等價的。) – Leigh

回答

6

這是一個XOR- 基於算法,而不是教科書之一,所以毯XOR算法的答案是不正確(並且在過去錯誤地應用於這些CFMX_COMPAT問題)。

要詳細瞭解此專有XOR的源代碼,請檢查this answer以「在C#和ColdFusion之間比較密碼哈希」,其中@Leigh(誰還評論其中一個問題)可幫助提供準確的端口該算法直接從Railo源碼中提取。

+1

感謝您發佈更好的答案。我一直聽說這是一個簡單的XOR。我想從某種意義上來說,它並不像我所相信的那樣簡單。無論如何,正確的答案總是,「不要使用CFMX_COMPAT」:) –

0

這絕對不是MD5,因爲這是一個散列算法,而不是加密算法(正如你指出的那樣)。

我不知道它使用什麼算法,但是你可以在cfusion.jar中反編譯相關的Java類並看看。我懷疑是否有更好的方法來找出答案。我懷疑即使你打開Adobe的支持憑單,他們實際上會告訴你。

+3

你可以看看[Railo source](https://github.com/getrailo/railo/blob/master/railo-java/railo-core/src/railo/runtime/crypt/CFMXCompat.java)。可能會有細微的差異,但通用算法是相同的。 – Leigh

+0

啊耶!忘了那個!好建議。 –

1

這是一個簡單的XOR算法。從技術上講,它是加密的,但它非常,非常非常非常脆弱。我應該在那裏放置更多的「非常」。

據我所知,明文的每一位與密鑰中的下一個字節異或,結果就是密文。

因此,如果我們看着一切位:

,P:1 0 1 0 1 0 1 0 0 0 1

K: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 XOR 0 - > 0

0 XOR 1 - > 1

1 XOR 0 - > 1

1 XOR 1 - > 0