1

我目前正在将 CakePhp 应用程序迁移到 ASP.NET。在这一点上阻止我的一件事是我无法获得正确的哈希方法来获得正确的密码,因此用户能够从 ASP.NET 应用程序登录。

我有在 config/core.php 文件中设置的盐值。

我用谷歌搜索试图确定在哪里可以找到使用哪种散列算法,但无法找到正确的查询或没有结果。

到目前为止,这是我对密码进行哈希处理的 C# 方法。

public static string ToHash(this string password, string salt)
{
  if (string.IsNullOrEmpty(password))
    return "";

  var provider = new SHA1CryptoServiceProvider();
  var encoding = new UnicodeEncoding();
  var bytes = provider.ComputeHash(encoding.GetBytes(salt + password));
  return Encoding.UTF8.GetString(bytes);
}

我尝试在密码之前或之后放置盐,目前根本不匹配,这是 cakephp mysql 数据库中的哈希密码:

c7fb60ef77dbe3d1681a68e6741ee3a23cc1f41d

这是我从我的方法中得到的

��3[v"����1�:�ѐ��</p>

不太确定在哪里/如何解决这个问题。任何帮助或提示将不胜感激。

谢谢

4

2 回答 2

3

我有!

至少它适用于我的配置:

从(在文件中Core.php搜索)查找盐。Security.salt然后,使用此代码(与问题非常相似):

string input = textBox1.Text;
input = "your salt should be here" + input;
var provider = new SHA1CryptoServiceProvider();
var encoding = new UTF8Encoding();
var bytes = provider.ComputeHash(encoding.GetBytes(input));
sha1result.Text = Bin2Hex(bytes);

Bin2Hex 的助手也在这里:

public static string Bin2Hex(byte[] ba)
{
    string hex = BitConverter.ToString(ba);
    return hex.Replace("-", "");
}

找到它并不容易,我搜索了一些互联网(没有结果!),最后求助于源挖掘。

于 2014-11-19T11:26:10.880 回答
1

我现在没有 Cake 的源代码,但你应该可以很容易地在源代码中查找 Cake 的散列和加盐方法。

上面的数据差异看起来就像 Cake 将哈希字节转换为一个字符串,其中哈希字节以十六进制为基数。无论散列方法有什么不同,在比较它们之前,您都必须将 C# 散列的结果转换为这样的字符串(或者以其他方式解析 Cake 的十六进制字符串并从中构建一个字节数组)。

于 2012-11-29T22:42:08.353 回答