【问题标题】:How to implement hashing between Oracle, SQL Server, and ASP.NET如何在 Oracle、SQL Server 和 ASP.NET 之间实现散列
【发布时间】:2012-02-24 08:26:36
【问题描述】:

我需要从 Oracle 服务器获取一些敏感数据到 SQL Server 以用于我的 ASP.NET 网站。让我们说一下它的密码。我们的安全人员说,这些密码需要在每一步都得到保护。我的网站需要能够将用户输入与这些密码进行比较。这些密码必须在晚上从 Oracle 服务器传输到 SQL Server,并且只能在白天在 SQL Server 上使用。

我能想到的最佳解决方案是我们需要在 Oracle 上对密码进行哈希处理并将哈希值传递给 SQL Server(假设两者之间的连接是安全的,因为这不是我的工作 :P)。然后我的 ASP.NET Web 应用程序需要能够对用户输入实现完全相同的散列,以便我们可以将输入散列与数据库散列进行比较。

所以我的问题是:如何在 Oracle 和 .NET 上使用相同的算法/密钥/盐来散列一些东西?我知道如何使用 .NET 散列函数,但我不确定我可以在 Oracle 中使用什么具有可比性……我可以将它们以纯文本形式从 ASP.NET 传递到 SQL Server 并在那里散列它们这更容易,但我们称之为“B 计划”。

【问题讨论】:

  • 为什么数据库需要关心哈希算法?数据库甚至不应该收到被散列的原始数据。您的应用程序应该会处理好这一点。
  • @vcsjones - 好问题。密码从不同的来源进入 Oracle。我的应用程序永远不会看到源代码,因此它不可能首先对它们进行哈希处理。
  • 如果 md5 适合您,请参阅我的回答 [此处][1]。 [1]:stackoverflow.com/questions/8810471/…

标签: asp.net sql-server oracle security hash


【解决方案1】:

您的数据存储区应该存储散列值,在 asp.net 端,您需要实现一个 md5 函数将字符串转换为散列,然后与您的数据库中的散列值进行比较。

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

Oracle 确实有能力使用 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();
}

【讨论】:

  • 我会指出 MD5 有点坏,而且似乎每天都在变得越来越坏。 SHA-256 实际上是当今用于此类目的的标准哈希算法,但看起来 Oracle 现在不支持它。但是,它们确实支持 SHA-1,这比 MD5 好得多。
  • 感谢您提供的信息,看看 SHA-1,您对 TripleDES 的感觉如何?我们在一些需要解密的应用程序中使用它。
  • TripleDES 是一种加密算法,而不是散列算法。在处理密码时,最好始终使用密码的哈希值(因为您无法取消哈希值)而不是密码的加密形式(因为您可以解密某些内容),如果可行的话。在这里,由于您只关心提交的密码是否与存储的密码匹配,而不是密码实际是什么,因此首选哈希。
  • 对,我知道 TripleDES 是加密而不是散列。显然,如果你散列一些你不希望它被解密的东西。我的问题更像是加密字符串的首选方法之一,您稍后需要解密这些字符串。我将把它留在这里,无需在 cmets 中进行对话 :)
猜你喜欢
  • 1970-01-01
  • 2021-07-21
  • 2011-07-18
  • 2013-03-24
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多