.Net 中的 PHP crypt() 函数?

标签 php .net asp.net security encryption

我正在用 ASP.NET MVC 重写一个 PHP 网站。我想保持相同的用户群,但使用 PHP crypt() 函数对密码进行哈希处理。我需要在 .Net 中使用相同的功能,以便我可以在登录时对密码进行散列处理,并根据用户数据库中的散列密码进行检查。

crypt 在这种情况下使用 CRYPT_MD5 实现 - 哈希值都以 $1$ 开头

我试过 Phalanger,但它没有 crypt 函数的 MD5 实现。

有人知道 .Net 中的一个吗? CodeProject 上 crypt() 的 C# 示例使用 DES,而不是 MD5。

我在 C# 中尝试了以下代码,使用盐+密码、密码+盐和盐的不同排列,有和没有 $1$ 前缀和 $ 后缀。 None 给出与 PHP 相同的结果:

static void Main(string[] args)
{
    const string salt = "somesalt";
    const string password = "fubar";
    const string plaintextString = password + salt;
    byte[] plaintext = GetBytes(plaintextString);
    var md5 = MD5.Create("MD5");
    byte[] hash = md5.ComputeHash(plaintext);
    string s = System.Convert.ToBase64String(hash);
    Console.WriteLine("Hash of " + password + " is " + s);
    Console.ReadKey();
}

private static byte[] GetBytes(string s)
{
    var result = new byte[s.Length];
    for (int i = 0; i < s.Length; i++)
        result[i] = (byte)s[i];
    return result;
}

最佳答案

md5 哈希有几种 .NET 方法,System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, format) 是最容易使用的,尽管它很啰嗦。只需将“md5”作为格式传递即可。

根据 PHP 执行此操作的方式,它可能很简单,就像在导入时将散列开头的 $1$ 切掉一样简单。它可能更复杂。如果您可以发布示例密码/哈希,我会看看是否可以想出一些 C# 为您从该密码生成相同的哈希。

关于.Net 中的 PHP crypt() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/343995/

相关文章:

asp.net - Response.Write 和 <%= %> 之间的实际区别是什么?

c# - 在 EntityFramework 中删除具有相关实体的实体

asp.net - ASP.NET Core/MVC 6 ViewModel 中的依赖注入(inject) (DI)

JavaScript - 从 PHP 引入多个变量

php - 无法在 Laravel 5.7 中发布 JWT 配置文件

javascript - 代码看起来不错,但是表单提交没有将 <canvas> 发布到 php

asp.net - TFS 不会删除外部 Dll

php - 如何创建可折叠列表?

.net - 从与 COM Interop 混合的 DLL 加载配置文件

c# - 如何解决 Xamarin.Android Java 互操作的缓慢问题