2012-02-01 26 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