2012-05-23 25 views
1

將現有的coldfusion網站轉換爲網點。如何在c#中CFMX_COMPAT中進行散列處理#

在ColdFusion代碼,密碼使用其散列()函數沒有算法散列:

SomePassword = '#hash(fldPassword)#' 

我發現​​,說默認的加密是

CFMX_COMPAT:生成一個散列字符串與 ColdFusion MX和ColdFusion MX 6.1(默認)生成的字符串相同。

有一些文章實際上告訴我如何解密。

根據Macromedia公司的ColdFusion的加密函數使用 基於XOR的算法,該算法利用了基於 由用戶作爲參數傳遞給函數的晶種的僞隨機32位密鑰。結果數據是UU編碼的。

你需要UUDECODE編碼值第一 http://www.eggheadcafe.com/printsear...asp?linkid=351

,然後用它與加密密鑰XOR它。 http://www.java2s.com/Code/CSharp/La...deamessage.htm

如果你沒有鑰匙 - 你的無辜時間。

但是,如何使它工作?我不認爲有任何關鍵。我只能看到'#hash(fldPassword)#'。請幫忙。謝謝。

+3

我相信hash()被設計爲一個單向函數,它不應該被「解密」嗎? –

+0

有趣,那麼爲什麼Adobe/Macromedia將它命名爲'CFMX_COMPAT',它確實只是一個'MD5'? – Henry

+1

@亨利 - 聽起來像一個文檔錯誤。 (當你需要一個勘誤的時候,哪裏出錯?)MX6的'hash()'默認是'MD5' - 而不是'CFMX_COMPAT'。另外,在以後的版本中,它們會將默認值減少到'CFMX_COMPAT',這是毫無意義的。它甚至不是哈希算法.. – Leigh

回答

3

有一些文章實際上告訴我如何解密。

散列和加密不是一回事。加密可以逆轉。如果您擁有正確的密鑰etectera,您可以恢復原始值。散列是單向旅程。一旦哈希,原始值不能恢復。 (理論上是這樣......一些較弱的哈希算法已經被破壞了。)所以你不能「解密」哈希值。但是你可以複製混淆的結果字符串。

我發現這個文件,說默認的加密是CFMX_COMPAT

其實它指的是默認算法。但是,我不太確定描述是否正確。 (編輯:正如Rasmus正確指出的那樣,它確實表示默認是MD5)但是,無論如何,CF9/7默認爲MD5。即使算法是CFMX_COMPAT。所以在任何一種情況下,C#中的一個簡單的MD5散列會給你相同的結果。

ie這些都產生相同的結果,即098F6BCD4621D373CADE4E832627B4F6

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

羽絨選民請發表評論。鑑於上面的例子證明答案是正確的,我很好奇你認爲是錯誤的... – Leigh

3

如果我正確地閱讀了文檔,CFMX_COMPAT散列只是MD5。

所以:

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

它應該很容易驗證,如果你有機會獲得一個ColdFusion安裝。

+0

謝謝。我同時得到了兩個正確的答案。我獎勵@Leigh,只是因爲你的聲譽得分太高。希望你不介意。 – Blaise

+0

大聲笑,我得到了同情票;)我要說,把它給Rasmus,因爲他得到了「默認」的權利,而我沒有。所以+1 – Leigh

相關問題