2012-11-29 33 views
1

我目前正在將CakePhp應用程序遷移到ASP.NET。有一件事現在阻止了我,我無法獲得正確的散列方法來獲得正確的密碼,因此用戶可以從ASP.NET應用程序登錄。從C#到MySQL的驗證CakePhp用戶

我有在config/core.php文件中設置的salt值。

我試圖確定在哪裏可以找到使用哪種哈希算法,並且無法找到正確的查詢或沒有找到結果。

這裏是我的C#方法到目前爲止哈希密碼。

public static string ToHash(this string password, string salt) 
{ 
    if (string.IsNullOrEmpty(password)) 
    return ""; 

    var provider = new SHA1CryptoServiceProvider(); 
    var encoding = new UnicodeEncoding(); 
    var bytes = provider.ComputeHash(encoding.GetBytes(salt + password)); 
    return Encoding.UTF8.GetString(bytes); 
} 

我已經試過之前或密碼後把鹽,它目前沒有匹配可言,這裏是從CakePHP的mysql數據庫中的哈希密碼:

c7fb60ef77dbe3d1681a68e6741ee3a23cc1f41d

這裏我從我的方法有

3 [v「1:ѐ

不是真的知道在哪裏/如何解決這個問題。任何幫助或提示將不勝感激。

感謝

回答

1

沒有與我的蛋糕來源的權利,但你應該能夠輕鬆地查找蛋糕的散列和鹽析法源。

上面的數據差異看起來像Cake將散列字節轉換爲一個字符串,其中的散列字節以十六進制表示。無論哈希方法有什麼不同,您必須在將C#哈希結果轉換爲這樣的字符串之前將其轉換爲一個字符串(或者以其他方式解析Cake的十六進制字符串並從中構建一個字節數組)。

3

我擁有它!

至少它爲我的配置:

Core.php(文件中搜索Security.salt)找到鹽。然後,使用此代碼(非常類似的問題):

string input = textBox1.Text; 
input = "your salt should be here" + input; 
var provider = new SHA1CryptoServiceProvider(); 
var encoding = new UTF8Encoding(); 
var bytes = provider.ComputeHash(encoding.GetBytes(input)); 
sha1result.Text = Bin2Hex(bytes); 

幫手BIN2HEX也在這裏:

public static string Bin2Hex(byte[] ba) 
{ 
    string hex = BitConverter.ToString(ba); 
    return hex.Replace("-", ""); 
} 

這是不容易找到它,我通過一些網絡搜索的(無結果!),並最終採取了源頭挖掘。

+0

成功之後,我們走得更遠 - 允許來自蛋糕的已認證用戶自動識別並登錄到另一端 - asp.net。我會分享這個,如果有人會善意問一個問題:) –