Vb.Net中是否有等效的PHP crypt($ string,$ salt)?无法使用$ salt

问题描述 投票:4回答:1
查找/创建任何内容

我正在尝试编译用VB编写的软件(我使用的是VisualStudio2010,框架4),该软件允许用户更改网站上的密码(很遗憾,该网站的默认changepassword形式无效,并且我无法修复通过PHP)。

[我对PHP和加密没有太多经验,所以我在Internet上寻找了VB.Net的一些解决方案,但经过2天的尝试后未获得预期的结果。

我做了一些研究,这就是我学到的:网站的PHP代码使用crypt($ string,$ salt)函数创建哈希密码。编码是一种MD5算法,因为我对网站数据库中的每个密码都加了类似'$ 1 $ ad000000 $'的字样。

我试图在VB中复制它,并且问题从ComputeHash(buffer()以Byte)开始,因为它不支持“ Salt”字符串。

PHP上的代码就这么简单:

$EncryptedPassword = crypt($userPassword, $salt);

生成的盐看起来像例如“ $ 1 $ ad000000 $”

$ EncryptedPassword的长度为34(12salt + 22hash),但是我想这是crypt()函数的标准长度,给定了特定的盐。

这是我目前正在VB上尝试的内容:

Dim Hashata = GetHash("asdkFAofkas", "$1$ad000000$")

Private Function GetHash(ByVal p1 As String, ByVal Salt As String) As Object
        Using hasher As MD5 = MD5.Create()
            Dim dbytes As Byte() = hasher.ComputeHash(Encoding.UTF8.GetBytes(p1 & Salt))
            Dim Conversione = Convert.ToBase64String(dbytes)
            Return Conversione
        End Using
    End Function

返回字符串是一个24个字符的字符串,无论“ p1”是什么,它总是以“ ==”结尾。我在互联网上读到这最后两个字符是可选的,因此在用Salt创建密码哈希时,我只是做:

Dim StoredPassword = Salt & Hashata.Substring(0,Hashata.Length-2)

当我编写相同的密码时,创建的StoredPassword(VB)与数据库中的密码(PHP)不一致。我尝试使用相同的密码在网站上创建多个用户,并且在数据库中以相同的方式将它们全部散列。

例如,这就是数据库中的内容:

-------------------------------------------------
| Username | Password                           |
-------------------------------------------------
|test1     |$1$ad000000$kcpPLtMxsedGD0d39UnXQg  |
-------------------------------------------------
|test2     |$1$ad000000$kcpPLtMxsedGD0d39UnXQg  |
-------------------------------------------------
|test3     |$1$ad000000$kcpPLtMxsedGD0d39UnXQg  |
-------------------------------------------------
|testVB    |$1$ad000000$5u-9pdu3HDnXt5pGdXZNug  |
-------------------------------------------------

test1,test2,test3在网站上设置了密码

testVB具有通过上述VB的功能生成的密码

我为test1,test2,test3和testVB编写了完全相同的密码。

数据库上的所有密码长度为34个字符

我已经尝试了以下操作(在VB上,因为我无法修改网站的PHP):

  • 仅编码p1,仅编码Salt,两个变量混合在一起(如上述代码中的代码)

  • 先将p1和Salt转换为十六进制字符串(首先转换为一个,然后再转换为另一个,然后再转换为两个,等等...),然后对其进行单独编码或混合使用

    ]
  • 使用不同类型的编码(UTF-7,UTF-16,UTF-32,“默认”和ASCII)]] >>

  • 我很确定问题出在ComputeHash函数上,该函数没有“ Salt”属性(它具有offset和count属性,但是我没有使用它们),没有它,它可以'用我想要的方式加密。

    有没有一种方法可以复制PHP的crypt($ string,$ salt)函数?

    [我敢打赌,如果没有$ salt,它们就会重合(我已经找到了一些可以那样工作的解决方案,但是我需要使用$ salt进行加密,因为如果没有$ salt,我将无法修改网站的PHP代码以进行加密。

非常感谢,很抱歉阅读了很长时间,我想确保自己没有错过任何东西:)

如果需要添加其他内容,请告诉我!

我正在尝试编译用VB编写的软件(我正在使用VisualStudio2010,Framework 4),该软件允许用户更改网站上的密码(很遗憾,网站默认的changepassword形式不起作用,...]]] >

Bcrypt.NET给您想要的东西。

string passwordHash = BCrypt.HashPassword("my password");
if (BCrypt.Verify("my password", passwordHash)) {
    // Valid
} else {
    // Incorrect password
}
php vb.net encryption hash salt
1个回答
0
投票

Bcrypt.NET给您想要的东西。

string passwordHash = BCrypt.HashPassword("my password");
if (BCrypt.Verify("my password", passwordHash)) {
    // Valid
} else {
    // Incorrect password
}
© www.soinside.com 2019 - 2024. All rights reserved.