Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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
在Vb.Net中是否有PHP密码($string,$salt)的等价物?Can';t使用$salt查找/创建任何_Php_Vb.net_Encryption_Hash_Salt - Fatal编程技术网

在Vb.Net中是否有PHP密码($string,$salt)的等价物?Can';t使用$salt查找/创建任何

在Vb.Net中是否有PHP密码($string,$salt)的等价物?Can';t使用$salt查找/创建任何,php,vb.net,encryption,hash,salt,Php,Vb.net,Encryption,Hash,Salt,我正在尝试编译一个用VB编写的软件(我使用的是VisualStudio2010,框架4),允许用户在网站上更改密码(遗憾的是,网站默认的changepassword表单不起作用,我无法通过PHP修复) 我对PHP和加密没有太多的经验,所以我在互联网上寻找了一些VB.Net的解决方案,但在尝试了2天之后没有得到预期的结果 我做了一些研究,这就是我学到的: 网站的PHP代码使用crypt($string,$salt)函数创建散列密码。 编码是一种MD5算法,因为我的salt对于网站数据库中的每个密码

我正在尝试编译一个用VB编写的软件(我使用的是VisualStudio2010,框架4),允许用户在网站上更改密码(遗憾的是,网站默认的changepassword表单不起作用,我无法通过PHP修复)

我对PHP和加密没有太多的经验,所以我在互联网上寻找了一些VB.Net的解决方案,但在尝试了2天之后没有得到预期的结果

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

我尝试在VB中复制它,问题从ComputeHash(buffer()作为字节)开始,因为它不支持“Salt”字符串

PHP上的代码非常简单:

$EncryptedPassword = crypt($userPassword, $salt);
生成的salt类似于,例如,“$1$ad000000$”

$EncryptedPassword的长度是34(12salt+22hash),但我猜这是给定特定salt的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代码修改为crypt)

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

如果还有什么我需要补充的,请告诉我

给你想要的

string passwordHash = BCrypt.HashPassword("my password");
if (BCrypt.Verify("my password", passwordHash)) {
    // Valid
} else {
    // Incorrect password
}

我的一个朋友在我向他提出同样的问题后告诉我,我可以尝试制作一个用PHP编写的Web服务,以便在VB中生成密码时调用(这样我就可以用PHP的crypt()函数对密码进行加密)。我甚至没有想过这个选择。如果有人有其他的答案,我会让这个问题保持开放状态,我会在编写这个问题并使其生效后立即用一些代码编辑它。你不想创建一个带有明确salt的问题。相反,让图书馆为你做这件事。按照文档进行操作。