2012-02-01 52 views
1

我需要從Oracle服務器獲取一些敏感數據到SQL Server以用於我的ASP.NET網站。讓我們說它的密碼。我們的安全人員表示,這些密碼需要在每一步都保證安全。我的網站需要能夠將用戶輸入與這些密碼進行比較。這些密碼必須在晚上從Oracle服務器傳輸到SQL Server,並且只能在白天在SQL Server上使用。如何在Oracle,SQL Server和ASP.NET之間實現哈希

我能想出的最佳解決方案是我們需要在Oracle上散列密碼並將散列傳遞給SQL Server(讓我們假設兩者之間的連接是安全的,因爲那不是我的工作:P)。然後,我的ASP.NET Web應用程序需要能夠在用戶輸入上實現完全相同的哈希,以便我們可以將輸入哈希與數據庫哈希進行比較。

所以我的問題是:我怎樣才能在Oracle和.NET上使用相同的算法/鍵/鹽進行哈希?我知道如何使用.NET哈希函數,但我不確定我可以在Oracle中使用哪些可比較的數據...我可以將它們以純文本形式從ASP.NET傳遞到SQL Server,並在那裏將它們哈希這很容易,但讓我們稱之爲「計劃B」。

+0

數據庫爲什麼需要關心的哈希算法?數據庫甚至不應該接收被哈希的原始數據。你的應用程序應該照顧這一點。 – vcsjones 2012-02-01 16:40:38

+0

@vcsjones - 好問題。密碼從不同的來源進入Oracle。我的應用程序永遠不會看到源代碼,因此它不可能是首先將它們散列的源代碼。 – jrizzo 2012-02-01 16:47:37

+0

如果md5適合你,請參閱我的答案[這裏] [1]。 [1]:http://stackoverflow.com/questions/8810471/get-hash-values-from-sql-server-and-oracle-and-compare-them/8835412#8835412 – tbone 2012-02-01 16:55:53

回答

4

你的數據存儲應該存儲散列值,在asp.net端你需要實現一個md5函數來將字符串轉換爲散列,然後與你的數據庫中的散列值進行比較。

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_obtool.htm#i1003449

甲骨文確實有使用MD5哈希,它可以傳遞到SQL服務器和落實,以及ASP.net的能力。

SQL Server的MD5

http://www.lazerwire.com/2011/10/ms-sql-md5-hash.html

ASP.net MD5

public string CalculateMD5Hash(string input) 
{ 
    // step 1, calculate MD5 hash from input 
    MD5 md5 = System.Security.Cryptography.MD5.Create(); 
    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); 
    byte[] hash = md5.ComputeHash(inputBytes); 

    // step 2, convert byte array to hex string 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < hash.Length; i++) 
    { 
     sb.Append(hash[i].ToString("X2")); 
    } 
    return sb.ToString(); 
} 
+1

I」我會指出MD5有點壞,而且似乎每天都會變得更加糟糕。目前,SHA-256確實是用於這種目的的標準哈希算法,但它看起來像Oracle現在不支持這種算法。但是,他們支持SHA-1,這比MD5好得多。 – jeffsix 2012-02-01 17:40:25

+0

感謝這些信息,看着SHA-1,您對TripleDES有什麼感受?我們在一些需要解密的應用程序中使用它。 – 2012-02-01 18:10:09

+0

TripleDES是一種加密算法,而不是散列算法。在處理密碼時,最好的做法是始終使用密碼散列(因爲您不能解密某些內容)而不是密碼的加密形式(因爲您可以解密某些內容),如果可行的話。在這裏,因爲如果提交的密碼與存儲的密碼匹配,而不是實際密碼,那麼最好使用散列。 – jeffsix 2012-02-01 18:35:58