1

現在、CakePhp アプリを ASP.NET に移行しています。この時点で私を妨げていることの 1 つは、ユーザーが 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 がハッシュのバイトを 16 進数ベースのハッシュのバイトを持つ文字列に変換するように見えます。ハッシュ方式の違いが何であれ、比較する前に C# ハッシュの結果をそのような文字列に変換する必要があります (または、別の方法で Cake の 16 進文字列を解析し、そこからバイト配列を作成します)。

于 2012-11-29T22:42:08.353 に答える