我已经阅读了大量的样本和答案(甚至更多关于密码学的工作原理),但没有一个能够回答我的情况。我正在VB.Net中从桌面应用程序创建一个新用户。用户需要使用Android的一小部分来更新PC不可用的评估(不幸的是,Web应用程序不是一个选项)
我在桌面应用程序中没有问题,一切正常。我正在使用PHP页面来处理Android中的登录和其他数据相关的操作,也没问题。但是,我确实需要将密码更改为普通字符串等来读取密码。我需要让PHP读取保存的盐渍字符串(每个密码的不同盐 - 所有随机生成的,对于超过1个用户的盐不相同)链接到该特定密码。
我已经玩了一段时间的代码尝试在PHP中使用相同类型的函数,但我完全迷失了如何转换.net部分以在PHP中使用。
我的.net代码看起来像这样 -
Imports System.Security.Cryptography
Imports System.Text
Module modSecurity
Public Function GetSaltedHash(pw As String, salt As String) As String
Dim tmp As String = pw & salt
' or SHA512Managed
Using hash As HashAlgorithm = New SHA256Managed()
' convert pw+salt to bytes:
Dim saltyPW = Encoding.UTF8.GetBytes(tmp)
' hash the pw+salt bytes:
Dim hBytes = hash.ComputeHash(saltyPW)
' return a B64 string so it can be saved as text
Return Convert.ToBase64String(hBytes)
End Using
End Function
Public Function CreateNewSalt(size As Integer) As String
' use the crypto random number generator to create
' a new random salt
Using rng As New RNGCryptoServiceProvider
' dont allow very small salt
Dim data(If(size < 7, 7, size)) As Byte
' fill the array
rng.GetBytes(data)
' convert to B64 for saving as text
Return Convert.ToBase64String(data)
End Using
End Function
在我的表单中,我将创建哈希密码和salt,如下所示 -
strPasswordNew = txtPassword.Text
Dim NewPWD As String = strPasswordNew ''Actual password
strSaltPWD = CreateNewSalt(SaltSize) ''Salt pwd
Dim SaltPWDHash As String = GetSaltedHash(NewPWD, strSaltPWD) ''New pwd now hashed
密码和salt在他们自己的字段下保存到数据库 - salt和pwd。
任何指针都将受到高度赞赏。