2014-02-25 58 views
1

我有一個使用ASP.NET 2.0構建的遺留Web應用程序。在此應用程序中實現了一個用戶註冊過程,用戶名和密碼存儲在SQL Server數據庫中。密碼按照預期進行散列處理。雖然我不是一個非常有經驗的.NET程序員,但我猜測System.Security.Cryptography程序集可以完成這項工作。哪種散列算法可以使用.NET,我可以使用java對這些散列執行密碼檢查

現在我們希望重用這個用戶數據庫用於其他服務(基本上SAML Identity Proider將是理想的)。我想使用Mule ESB和Java Code的組合來做到這一點,但是我是否有機會像使用.NET一樣在Java中散列密碼並在我的用戶數據庫中檢查這個散列?有沒有人做過這個?

編輯:我已經進一步調查了舊版應用程序。我使用密碼「stackoverflow」創建了一個'Testuser'。在數據庫中,我有兩個字段,一個名爲「Password」,一個名稱爲「EncryptionToken」。

對於上面 '計算器' 的憑據變得

密碼:F545C9A2670C9C261C657CC48AA8F91F284DD824B8142466DB7370FF4A30D741 SecurityToken:TN + nms4 =

以用於存留用戶密碼的代碼看起來是這樣的:

public void SetEncryptedPassword(Account user, string password) 
{ 
    user.SecurityToken = CryptoProviderBase.GenerateRandomSalt(); 
    var hash = new SHA256HashBuilder { Text = password, Salt = user.SecurityToken }; 
     user.Password = hash.CalculateHash(); 
} 

所以哈希似乎是一個隨機鹽SHA256哈希是存儲在SecurityToken中。

不幸的是,我不能(不知道)如何在Java中重現這一點。你能給我一些提示嗎?

+0

你需要找出.NET使用的加密算法。但是,在java中很難解密。 – Ved

+0

請看這裏:http://stackoverflow.com/questions/1700702/asp-net-membership-saves-changed-password-as-plain-text-even-with-hashed-passwor – Alexander

回答

0

我想我已經通過深入調查(反編譯)一些代碼,自己解決了這個問題並思考和嘗試。有一個online SHA-256 calculator我用這個。

如果我輸入SecurityToken/Salt「tn + nms4 =」第一個並將密碼「stackoverflow」附加到它。然後甩這個。我得到了存儲在數據庫中的哈希值。

看起來像傳統應用程序中使用的加密提供程序的實現不是純粹的.NET,而更可能是自制的東西。