2

これがテーブルです。 ここに画像の説明を入力

そして、phpmyadminで実行されるクエリは

SELECT * FROM users WHERE hashed_password = '8c1017982b2032cc059203e3d83dd0ee2e7a86b3'

結果は空の結果セットです。クエリが SELECT * FROM users WHERE username='tt' Then の場合、期待どおりに機能します。

なんで ?私が行方不明であることは明らかですか?パスワードは、php の sha1() を使用してハッシュされました

SELECT * FROM users WHERE hashed_password LIKE '8c1017982b2032cc059203e3d83dd0ee2e7a86b3%'空の結果セットを与えます。

「show create table users」の出力

  CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `hashed_password` varchar(255) NOT NULL,
  `favourites` text,
  `ip_address` varchar(40) DEFAULT NULL,
  `enabled` tinyint(1) NOT NULL DEFAULT '1',
  `trust_level` int(11) NOT NULL DEFAULT '0',
  `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (`id`)
  ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1

の出力select hashed_password, length(hashed_password) from users ここに画像の説明を入力

4

2 に答える 2

1

ハッシュの長さは 40 文字 (SHA-1 のように見えます) ですが、データベース フィールドには 42 文字が含まれています。明らかに、どの 42 文字のハッシュも、提供した 40 文字のリテラルと比較することはできません。さらに、2 つの余分な文字がハッシュの先頭にあるようです (そうでなければ、このLIKEトリックはうまくいったはずです)。

そこにさらに 2 つの文字がある理由を調べてください。ハッシュを挿入するコードは、それについて何かを知っている可能性があります。

于 2012-04-30T09:39:56.160 に答える
0

次のようなことを試してみてください。

SELECT * FROM users WHERE SHA1(hashed_password) = '8c1017982b2032cc059203e3d83dd0ee2e7a86b3'
于 2012-04-30T10:10:35.520 に答える