【发布时间】:2016-01-07 02:54:55
【问题描述】:
在我的网络应用程序中,在数据库中插入密码之前,我创建了一个随机盐,然后我将这个盐传递给一个哈希函数,如下所示:
function generate_salt()
{
$max_length = 100;
$salt = hash('sha256', (uniqid(rand(), true)));
return substr($salt, 0, $max_length);
}
function hash_password($salt, $password)
{
$half = (int)(strlen($salt) / 2);
$hash = hash('sha256', substr($salt, 0, $half ) . $password . substr($salt, $half));
for ($i = 0; $i < 100000; $i++)
{
$hash = hash('sha256', $hash);
}
return $hash;
}
这是我的vb.net 函数:
Public Shared Function CreateRandomSalt() As String
Dim mix As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+=][}{<>"
Dim salt As String = ""
Dim rnd As New Random
Dim sb As New StringBuilder
For i As Integer = 1 To 100 'Lunghezza del salt
Dim x As Integer = rnd.Next(0, mix.Length - 1)
salt &= (mix.Substring(x, 1))
Next
Return salt
End Function
Public Shared Function Hash512(password As String, salt As String) As String
Dim convertedToBytes As Byte() = Encoding.UTF8.GetBytes(password & salt)
Dim hashType As HashAlgorithm = New SHA512Managed()
Dim hashBytes As Byte() = hashType.ComputeHash(convertedToBytes)
Dim hashedResult As String = Convert.ToBase64String(hashBytes)
Return hashedResult
End Function
现在我的问题是,当我从 vb.net 应用程序创建新用户或更新特定用户的密码时,Web 应用程序无法执行登录到我的用户,可能密码编码不同,所以我需要vb.net 或php 的函数,它允许我使用相同的编码。我该怎么做?
【问题讨论】:
-
但是我的编码是 256
-
您是存储盐还是在每次用户尝试登录时生成一个随机盐?
-
我将 salt 作为 UNIQUE 存储在我的数据库中,我有两个数据库,一个用于客户端应用程序,另一个用于 Web 应用程序。
-
在这种情况下,您的问题不在于盐函数。它在 hash512 函数中。您的两个哈希函数完全不同。一个将密码放在盐的中间,另一个只是附加它。在一个函数中你散列 100000 次,而另一个你只做一次。