1

パスワードは、もともと .NET プラットフォームで作成され、MSSQL に保存されたパスワード ハッシュと一致する必要があります (したがって、暗号化はおそらく SHA1 です)。

MySQL テーブルは次のようになります。

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `UserName` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
  `PasswordHash` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `PasswordSalt` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=12535 ;

--
-- Dumping data for table `test`
--

INSERT INTO `test` (`id`, `UserName`, `PasswordHash`, `PasswordSalt`) VALUES(9836, 'demoadmin', '?z1??9t|????e&??9aK', -1190254076);
INSERT INTO `test` (`id`, `UserName`, `PasswordHash`, `PasswordSalt`) VALUES(12534, 'sunny', '??o\\(R?8~??6>?t????o', 549612932);

実行する必要があることに非常に近い例を 2 つ見つけましたが、それを機能させることができました。

例 1: http://gilbert.pellegrom.me/replicating-net-password-hashing-in-php/

例 2: http://www.kevinbruce.com/Blog?area_id=6&blog_id=3&ba_id=27

ユーザー名とパスワードは次のとおりです。

最初のユーザー: demoadmin/demotest 2 番目のユーザー: sunny/eclyptix

助けてください!

4

2 に答える 2

0

エンコードに問題があるようです:

'?z1??9t|????e&??9aK'

元のコードが壊れていて、印刷可能な ASCII 範囲外の文字を疑問符に変換していたようです。

この動作を PHP で再現することができます。ただし、この壊れたスキームを使い続けると、ハッシュの衝突が見つかる可能性が高くなるため、システムのセキュリティが損なわれます。すべてのユーザーにパスワードを変更してもらう必要がある場合があります。今回は、ハッシュが正しく保存されていることを確認してください。さらにエンコードの問題が発生するリスクを最小限に抑えるために、バイナリ データではなく 16 進数の文字列として格納することも検討してください。

于 2011-11-05T19:59:27.900 に答える
0

ここにケビン・ブルース(あなたが引用した2番目の例から)。

価値のあることですが、私の経験では問題を解決できませんでした。実際に、Elizabeth Smith (Windows 用の PHP コアに取り組んでいる) と話をしたところ、.NET と同じレベルでのハッシュ サポートには、PHP での文字エンコーディング サポートが原因で大きな断絶があることに同意しました。これは私が疑ったものです。

于 2013-05-23T20:01:31.737 に答える