gpt4 book ai didi

c# - 使用 PHP 对 ASP.NET 成员身份中的用户进行身份验证

转载 作者:可可西里 更新时间:2023-10-31 22:55:52 25 4
gpt4 key购买 nike

尝试使用 PHP 根据现有 ASP.NET 成员数据库对用户进行身份验证时,我遇到了一些问题。我在网上搜索过,发现现有的答案似乎对我不起作用。即:

public static function Hash($password, $salt)
{
$decodedSalt = base64_decode($salt);
$utf = mb_convert_encoding($password, 'UTF-16LE', 'UTF-8');
return base64_encode(sha1($decodedSalt.$utf, true));
}

我认为部分问题是密码哈希值实际上并不是用 SHA-1 计算的,因为数据库中的值是 44 个字符长的 base64 编码字符串(这意味着输入可能是 256 位长).我曾尝试使用 SHA-256 代替 SHA-1,但无济于事。我在 web.config 中找不到会进一步加盐的机器 key ,当我在本地或生产服务器上运行时,ASP.NET 站点会生成相同的哈希值,所以我不知道它们为什么会这样'匹配。

Web.config 成员提供者:

<add connectionStringName="MySqlMembershipConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" autogenerateschema="true" name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, mysql.web" />

应该有效的示例密码:

$salt = 'Mu1tp8XzfKl8dSTVAZm44A=='; // Straight from the DB
$password = 'testing';
$expectedHash = 'TQN7m8OWIyBOKVwzegWSUBVq7o7+KWFBc46J+B77mLw=' // Straight from the DB

// When using the above Hash function with SHA-256 instead of SHA-1
$generatedHash = 'rpmTmtBfWoJz71ooQGQUIIyQJKd99qhYxMUI1yda0qE='

想法?知道为什么我的哈希值与数据库中存储的内容不匹配(以及为什么/如何在通过 ASP.NET 站点登录时工作)?我试过换掉哈希函数、反转密码/salt 连接以及在敲打我的计算机时大声喊叫,但这些似乎都无济于事。

最佳答案

我查看了您链接到的身份验证问题页面,一个特别的答案引起了我的注意:https://stackoverflow.com/a/4227642/633098 .

因为您说使用的算法不再是 SHA1,而更可能是 SHA256,所以我开始尝试使用 HMAC 散列,而不是 SHA256。一开始它不起作用,但后来我尝试将由密码和盐组成的串联字符串与盐(= key )本身结合使用,并且它起作用了。

这是我制作的简单函数:

function _hash($password, $salt) {
return base64_encode(hash_hmac('sha256', base64_decode($salt) . iconv('UTF-8', 'UTF-16LE', $password), base64_decode($salt), true));
}

$salt = 'Mu1tp8XzfKl8dSTVAZm44A=='; // Straight from the DB
$password = 'testing';

var_dump(_hash($password, $salt));

Resulting hash: TQN7m8OWIyBOKVwzegWSUBVq7o7+KWFBc46J+B77mLw=

关于c# - 使用 PHP 对 ASP.NET 成员身份中的用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com