在PHP中解密VB.Net(14)System.Security.Cryptography附加密码以登录Android应用程序

在PHP中解密VB.Net(14)System.Security.Cryptography附加密码以登录Android应用程序,php,vb.net,hash,cryptography,salt,Php,Vb.net,Hash,Cryptography,Salt,我已经阅读了大量的样本和答案(甚至更多关于密码学是如何工作的),但没有一个能回答我的问题。我正在从VB.Net中的桌面应用程序创建一个新用户。用户需要在一小部分时间内使用安卓系统来更新没有PC的估价(不幸的是,Web应用程序不是一个选项) 我在桌面应用程序中没有问题,一切正常。我使用一个PHP页面来处理Android中的登录和其他与数据相关的操作,也没有问题。不过,我不得不将密码改为普通字符串等来读取密码。我需要让PHP读取与该特定密码链接的已保存的salt字符串(每个密码的salt不同-都是随

我已经阅读了大量的样本和答案(甚至更多关于密码学是如何工作的),但没有一个能回答我的问题。我正在从VB.Net中的桌面应用程序创建一个新用户。用户需要在一小部分时间内使用安卓系统来更新没有PC的估价(不幸的是,Web应用程序不是一个选项)

我在桌面应用程序中没有问题,一切正常。我使用一个PHP页面来处理Android中的登录和其他与数据相关的操作,也没有问题。不过,我不得不将密码改为普通字符串等来读取密码。我需要让PHP读取与该特定密码链接的已保存的salt字符串(每个密码的salt不同-都是随机生成的,超过1个用户的salt不相同)

我已经花了一段时间研究代码,尝试在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保存到数据库中各自的字段salt和pwd下


非常感谢您提供任何提示。

通常,如果密码是纯文本,则会出现安全错误。那么,为什么需要它们作为纯文本呢?仅仅使用哈希函数是不够的,仅仅添加一个salt对提高安全性几乎没有什么作用。相反,使用随机盐在HMAC上迭代大约100ms,并使用散列保存盐。使用诸如
PBKDF2
(又称
Rfc2898DeriveBytes
)、
password\u hash
/
password\u verify
Bcrypt
等函数和类似函数。关键是让攻击者花费大量时间通过暴力手段查找密码。保护您的用户很重要,请使用安全的密码方法。@Zaph,感谢您的回复,我不需要明文密码,我需要在用户登录android应用程序时将其与哈希密码和salt密码进行比较。然而,这些密码和密码是在.net桌面应用程序中创建的,这意味着我需要使用相同的“公式”来确认在android应用程序上输入了正确的密码。这是使用php脚本连接和登录完成的。我只是将pass改为纯文本来测试连接和登录部分。但这是非常不安全的。不过,我将对此进行更深入的研究,因为当我在启动.net应用程序时读到这篇文章时,有人建议上面的方法是一种非常安全的方法。显然不是。
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