前回(01)osCommerceの顧客データをCSVデータで引っぱってきたので今度はそこにある暗号化されたパスワードの照合をヤります。
んで、まずosCommerceのソースコードでパスワード処理部分を探ってみるとMD5に塩降った感じのを見つけた分けです。んで、今回はそれを丸ごと抜き出してアレします。
とりあえず先に抜き出したCSVから暗号化前の文字列解ってるヤツがある前提で書きます。(別に無くてもイイけどテスト動作確認面倒だしね)
多分この後書くんじゃないかと思うw新規登録時の暗号化処理部分見てテスト用パスワードでやってもイイです。
ちなみに、今回はDBに対するSQLコマンドはナシです。まぁこーゆーコトしようとするヒトは処理内容が解れば後は大体OKかと思いますしw
要はosCommerceから希望する処理のPHPコード引っぱってこれたら何とかなる感じ?
今回は仮に
パスワード:FUJIMIDAYO
暗号化文字列:02ac2c8eab2b19874db6d26d20b14e5b:cb
としてテスト用コードに準備した変数に入れます。
んで、暗号化文字列の「:」で区切られた部分がイワユル「塩」ですね。
んじゃ、osCommerceのコードをコピってきて適当な変数使ってテストします。
<?php //ログインで入力されたパスワード $plain = "FUJIMIDAYO"; //DBに格納されてる暗号化されたパスワード $encrypted = "02ac2c8eab2b19874db6d26d20b14e5b:cb"; //null不許可処理 function tep_not_null($value) { if (is_array($value)) { if (sizeof($value) > 0) { return true; } else { return false; } } else { if (($value != '') && ($value != 'NULL') && (strlen(trim($value)) > 0)) { return true; } else { return false; } } } // パスワードチェック function tep_validate_password($plain, $encrypted) { if (tep_not_null($plain) && tep_not_null($encrypted)) { $stack = explode(':', $encrypted); if (sizeof($stack) != 2) return false; if (md5($stack[1] . $plain) == $stack[0]) { //true return (md5($stack[1] . $plain)); } } //false return false; } //ここからチェック処理 if(tep_validate_password($plain, $encrypted) == true) { //照合一致した場合の処理 echo "完全に一致<br />"; } else { //照合一致しなかっら場合の処理 echo "('A`)ヴァー<br />"; } //内容確認 $moto = tep_validate_password($plain, $encrypted); echo "プレーン:".$plain."<br />"; echo "暗号文字:".$encrypted."<br />"; echo "照合文字:".$moto."<br /><br />"; ?>こんな感じです。
これでechoされる「照合文字」は減塩wした状態です。
あとは大体使い方想像できるんじゃないかと思うケド・・・。
EC-CUBEとかに顧客データ流し込んで、EC-CUBEのパスワード照合部分をこんな感じのMD5に置き換えるトカすれば「ログイン」は出来るようになるかも?まぁ投げっぱなし感パねぇけどそんな感じ。