Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle、SQL Server和ASP.NET之间实现哈希_Asp.net_Sql Server_Oracle_Security_Hash - Fatal编程技术网

如何在Oracle、SQL Server和ASP.NET之间实现哈希

如何在Oracle、SQL Server和ASP.NET之间实现哈希,asp.net,sql-server,oracle,security,hash,Asp.net,Sql Server,Oracle,Security,Hash,我需要从Oracle服务器获取一些敏感数据到SQL服务器,以便在我的ASP.NET网站中使用。让我们说出它的密码。我们的安全人员说,这些密码需要每一步都加以保护。我的网站需要能够比较用户输入这些密码。这些密码必须在夜间从Oracle server传输到SQL server,并且只能在白天在SQL server上使用 我能想到的最佳解决方案是,我们需要对Oracle上的密码进行散列,并将散列传递给SQL Server(假设两者之间的连接是安全的,因为这不是我的工作:p)。然后,我的ASP.NET

我需要从Oracle服务器获取一些敏感数据到SQL服务器,以便在我的ASP.NET网站中使用。让我们说出它的密码。我们的安全人员说,这些密码需要每一步都加以保护。我的网站需要能够比较用户输入这些密码。这些密码必须在夜间从Oracle server传输到SQL server,并且只能在白天在SQL server上使用

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


所以我的问题是:如何在Oracle和.NET上使用相同的算法/key/salt散列某些内容?我知道如何使用.NET散列函数,但我不确定我能在Oracle中使用哪些可以与之相比的函数。。。如果方便的话,我可能会将它们以纯文本形式从ASP.NET传递到SQL Server并在那里散列,但我们可以称之为“计划B”。

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

Oracle确实能够使用MD5哈希,您可以将其传递到SQL server并实现,还可以使用ASP.net

SQL Server md5

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();
}
公共字符串计算emd5hash(字符串输入)
{
//步骤1,从输入计算MD5散列
MD5 MD5=System.Security.Cryptography.MD5.Create();
byte[]inputBytes=System.Text.Encoding.ASCII.GetBytes(输入);
byte[]hash=md5.ComputeHash(inputBytes);
//步骤2,将字节数组转换为十六进制字符串
StringBuilder sb=新的StringBuilder();
for(int i=0;i
您的数据存储应该存储散列值,在asp.net端,您需要实现md5函数将字符串转换为散列值,然后与数据库中的散列值进行比较

Oracle确实能够使用MD5哈希,您可以将其传递到SQL server并实现,还可以使用ASP.net

SQL Server md5

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();
}
公共字符串计算emd5hash(字符串输入)
{
//步骤1,从输入计算MD5散列
MD5 MD5=System.Security.Cryptography.MD5.Create();
byte[]inputBytes=System.Text.Encoding.ASCII.GetBytes(输入);
byte[]hash=md5.ComputeHash(inputBytes);
//步骤2,将字节数组转换为十六进制字符串
StringBuilder sb=新的StringBuilder();
for(int i=0;i
为什么数据库需要关心哈希算法?数据库甚至不应该接收正在散列的原始数据。您的应用程序应该会处理这些问题。@vcsjones-好问题。密码从另一个来源进入Oracle。我的应用程序永远看不到源代码,因此它不能首先对它们进行哈希运算。如果md5对您有效,请参见我的答案[此处][1]。[1] :为什么数据库需要关心哈希算法?数据库甚至不应该接收正在散列的原始数据。您的应用程序应该会处理这些问题。@vcsjones-好问题。密码从另一个来源进入Oracle。我的应用程序永远看不到源代码,因此它不能首先对它们进行哈希运算。如果md5对您有效,请参见我的答案[此处][1]。[1] :我要指出的是,MD5有些破损,而且似乎每天都有更多破损。SHA-256实际上是目前用于此类目的的标准哈希算法,但Oracle目前似乎不支持这种算法。但是,他们确实支持SHA-1,这比MD5好得多。感谢您提供的信息,看看SHA-1,您对TripleDES的感觉如何?这里我们在一些需要解密的应用程序中使用它。TripleDES是一种加密算法,而不是散列算法。在处理密码时,最好的做法是始终使用密码散列(因为您无法解除某些内容的散列),而不是密码的加密形式(因为您可以解密某些内容),如果这样做有效的话。在这里,由于您只关心提交的密码是否与存储的密码匹配,而不关心密码的实际内容,所以首选哈希。对,我知道TripleDES是加密而不是哈希。显然,如果你散列了一些你不想被解密的东西。我的问题更一般,它是加密字符串的首选方法之一,您以后需要解密字符串。我将把它留在这里,不需要在评论中进行对话:)我要指出,MD5有些崩溃,而且似乎每天都在变得越来越崩溃。SHA-256实际上是目前用于此类目的的标准哈希算法,但Oracle目前似乎不支持这种算法。但是,他们确实支持SHA-1,这比MD5好得多。感谢您提供的信息,看看SHA-1,您对TripleDES的感觉如何?这里我们在一些需要解密的应用程序中使用它。TripleDES是一种加密算法,而不是散列算法。在处理密码时,最好的做法是始终使用密码散列(因为您无法解除某些内容的散列),而不是密码的加密形式(因为您可以解密某些内容),如果这样做有效的话。在这里,由于您只关心提交的密码是否与存储的密码匹配,而不关心密码的实际内容,所以首选哈希。对,我知道TripleDES是加密而不是哈希。显然,如果你把你不喜欢的东西弄碎了