カテゴリー
EC-CUBE osCommerce

osCommerceの顧客データを移行する実験02

前回(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に置き換えるトカすれば「ログイン」は出来るようになるかも?

まぁ投げっぱなし感パねぇけどそんな感じ。

%d