我在SQL Server 2008中的現有數據庫通過存儲過程對現有的PHP的Web應用程序進行用戶鑑權。 Web應用程序向存儲過程發送一個字符串,但存儲過程存儲並使用SQL校驗和(http://msdn.microsoft.com/en-us/library/ms189788.aspx)檢查該值。存儲過程將字符串轉換爲NVARCHAR(50),並將CHECKSUM作爲int存儲在用戶表中。實現SQL校驗和Java的
我現在寫上現有的數據庫之上的新的Java應用程序,我正在寫一個自定義的春天認證管理器。我想重新實現Java中的CHECKSUM算法,所以我不需要調用存儲過程來執行轉換,但是我找不到有關SQL CHECKSUM如何工作的任何文檔。
我嘗試下面的代碼,有猜測,這是CRC32,但它不能返回相同的值SQL CHECKSUM:
String pass = "foobar";
CRC32 crc32 = new CRC32();
crc32.update(pass.getBytes("UTF-16")); //This is due to the stored procedure casting as nvarchar
crc32.getValue();
任何人都可以點我到SQL校驗使用,所以我的算法可以在Java中重新實現它?
的問題也不是其算法提供了安全的最佳哈希值。由於我們不準備強制系統範圍的密碼重置,因此安全性不在此特定情況下的要求範圍內。問題是T-SQL CHECKSUM使用什麼算法,以便它可以重新實現。這個特定的用例是用於驗證的,但是在許多不同的應用程序中這是有必要的。
難道你們就不能只是使用一些現有的Java功能,並更新所有與新的哈希的數據?也許作爲保留當前版本的新專欄(以防萬一)。這可能也有幫助http://stackoverflow.com/q/331157/27535 – gbn
這可能最終不得不成爲最後的選擇。但是,這將需要重置現有帳戶上的密碼,因爲原始密碼未存儲在數據庫中。 – aweigold
@aweigold:+1以正確的方式處理密碼:-) –