joppot

コピペで絶対動く。説明を妥協しない

プログラミング

phpとmysqlでアカウント管理する時のテストユーザーのパスワードの暗号化はmysqlのsha1でもできる

投稿日:2014年3月18日 更新日:


by brewbooks

by brewbooks

概要

みなさんこんにちはcandleです。最近はphpでサービスを書いたりしています。その中でテストユーザーのアカウント管理でパスワードを暗号化してデータベースに収めています。

ちょっと前までは、php側のsha1でパスワードを暗号化して収めていたのですが、わざわざ、プログラムを書くのも面倒くさかったので、mysql側でテストユーザーを作成できないかと思い調べてみるとできました。

前提

MAMPかXAMMPなどのローカル開発環境またはPHPとmysqlを動かせる環境が準備されている。

テストユーザーのテーブルを作成する

テストユーザーのテーブルは下のものを使いましょう

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `password` varchar(255) NOT NULL,
  `age` int(10) NOT NULL,
  `created` datetime NOT NULL,
  `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;



INSERT INTO `users` (`id`, `name`, `password`, `age`, `created`, `modified`) VALUES
(1, 'alice', '', 10, '2014-02-18 05:29:13', '2014-02-18 00:40:22'),
(2, 'bob', '', 12, '2014-02-17 21:11:44', '2014-02-18 00:40:43'),
(3, 'tom', '', 15, '2014-02-17 04:37:07', '2014-02-18 00:41:18');

これを適当なmysqlのデータベースにインポートするかsql文として実行し、テーブルを作成します。

私はbtestデータベースに作成しました。

https://joppot.s3.amazonaws.com/wp-content/uploads/2014/03/MAMP1-630x173.jpg

MysqlのSHA1でパスワードを暗号化して保存する

userテーブルには3人のテストユーザがいます。aliceのパスワードを登録しましょう。

下のSQL文で暗号化できます。

UPDATE users SET PASSWORD = SHA1('bababa') WHERE name =  "alice";

https://joppot.s3.amazonaws.com/wp-content/uploads/2014/03/MAMP-2.jpg

レコードを見てみましょう。aliceのパスワードが暗号化されて保存されています。

https://joppot.s3.amazonaws.com/wp-content/uploads/2014/03/MAMP-4-630x170.jpg

便利ですね。

phpからmysqlのパスワードを照合する

phpのsha1で暗号化したパスワードをもとにmysqlのsha1で暗号化したレコードを照合できるか試してみましょう。

結論から言うと、照合できます。仮にPHPから照合できなければ、おさめられているパスワードはマッチされないので意味をなさない事になります。

MAMPのhtdocsのどこかに適当なフォルダを作ります。

私は毎度の事ながら、alltestフォルダを使います。

https://joppot.s3.amazonaws.com/wp-content/uploads/2014/03/fewafewa.jpg

その中にsha1test.phpを作ります。

https://joppot.s3.amazonaws.com/wp-content/uploads/2014/03/alltest_と_alltest.jpg

sha1test.phpに次のphpコードを書きましょう。

<?php

mysql_connect('localhost','root','root')or die(mysql_error());
mysql_select_db('btest')or die(mysql_error());
mysql_query('SET NAMES UTF');

$search_sql=sprintf("SELECT * FROM users WHERE password='%s'",sha1("bababa"));
$search=mysql_query($search_sql)or die(mysql_error());
$search_result=mysql_fetch_assoc($search);

print_r($search_result);

?>

sha1test_php

ブラウザで実行する

私はの場合はalltestフォルダのsha1test.phpファイルなので下のURLになります。

http://localhost:8888/alltest/sha1test.php

ここでの表示結果にaliceのデータが表示されれば成功です。

localhost_8888_alltest_sha1test_php

表示されました。成功です。このことから、mysqlのsha1で保存したデータとphpのsha1で暗号化したデータは照合できるという事がわかります。

まとめ

この方法を知るまではわざわざphpで暗号化してmysqlのデータベースにおさめていました。そうすると、毎度phpでユーザー作成のプログラムを書かなくてはならなかったのですが、これでだいぶ楽になりました。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Rails pluginを使ったgemの作り方[4](controller helper編)

概要 みなさんこんにちはcandleです。今回はgemの中枢とも言えるhelperの作り方です。 helperというのは様はgemにすることで便利になる関数を作るとというイメージです。 例えば、con …

ruby on railsで出力されるlog(ログ)のフォーマットを変更する

概要 みなさんこんにちはcandleです。今回はrailsのログに関する記事です。railsは決まった記述でログを出力します。 webアプリケーションを実行中におかしな挙動が合った場合はこのログをもと …

phpmyadminでmysqlデータベースの照合順序を変更する

概要 みなさんこんにちはcandleです。 ちょっとした事なのですが、意外に分からなかったのでまとめました。 phpmyadminを使ってデータベースを作ると、うっかり、utf8_general_ci …

fabricのsshのネットワーク設定でパスワードか公開鍵を使って認証する

概要 皆さん今日はcandleです。今回はsshを使ったfabricの設定をしましょう。 一般にsshにはパスワード認証と公開鍵認証があるので、そのどちらも試してみましょう。 もちろんセキュリティ面で …

react nativeのandroidでfailed to find Build Tools revision 23.0.1エラーが出る時の対処

概要 みなさんこんにちは、candleです。今回はreact nativeでrun-androidでbuildが失敗する時の対処です。 私の場合最新のandroid-sdkを入れたところ、以下のような …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー