PHP MD5ハッシュ値総当たりは特に何も考えず質問してしまい申し訳ありませんでした
色々な追記がある中でやりたかったことを書きます
まず、シャッフルしたmd5ハッシュ値がパスワードとして記録されているものとします
md5ハッシュ値をシャッフルした場合に、照合できないじゃないかとご指摘いただきました
パスワードとしてシャッフルされたmd5ハッシュ値を照合する仕組みを考えてみました
ユーザー側が入力したパスワードをMD5ハッシュして一文字づつ分割して配列に代入
同じ文字、文字数が何個あるかをカウント
記録されてあるシャッフルされたMD5ハッシュも同じように1文字づつ分割して代入
同じ文字、文字数が何個あるかをカウント
入力されたパスワードのMD5ハッシュと記録されているシャッフルされたMD5ハッシュと
同じ文字、文字の数が一致してるかで照合
以上になりますが、何か問題点があればご指摘ください
これらは実装するものではなく、一時的な案で考えたものになります
当方素人ですのでソースに雑い部分があると思いますがご了承下さい
追記です
パスワードをMD5で保存する為の思考ではありません
結果的にそういう形として提示しているだけで、
総当たり対策である事が目的です
完全なる興味本位です
<?php $hit=0; $md5_array=[]; $shuffle_md5_array=[]; $md5_string="hello";//ユーザーがパスワードにhelloと入力したと仮定 $password="09bdb97a11a44551cd769b47209c2112";//DBに記録されてるパスワードと仮定 helloをmd5ハッシュしてシャッフルしたもの $md5_str=md5($md5_string); $md5_string=str_split($md5_str); foreach($md5_string as $value){ $md5_array[$value].=$value; } foreach($md5_array as $key => $value){ $md5_array[$key]["md5_length"]=substr_count($value,$key); } $shuffle_md5_string=str_split($password); foreach($shuffle_md5_string as $value){ $shuffle_md5_array[$value].=$value; } foreach($shuffle_md5_array as $key => $value){ $shuffle_md5_array[$key]["md5_length"]=substr_count($value,$key); } foreach($md5_array as $key => $value){ if($md5_array[$key]["md5_length"]==$shuffle_md5_array[$key]["md5_length"]){$hit++;}else{$hit--;}//MD5ハッシュとシャッフル後のハッシュの判定 判定基準は同じ文字が何個あるか、同じ文字であるか } if($hit==count($md5_array)){//完全一致でログイン echo "ログイン"; }else{ echo "不一致"; } ?>
回答1件
あなたの回答
tips
プレビュー