ホームページ >php教程 >php手册 >MD5 変換アルゴリズムを使用して、徹底的な (衝突) パスワード クラッキングを防止します。

MD5 変換アルゴリズムを使用して、徹底的な (衝突) パスワード クラッキングを防止します。

WBOY
WBOYオリジナル
2016-06-21 09:15:411147ブラウズ

変換|アルゴリズム

MD5 は、Web アプリケーションで最も一般的に使用されるパスワード暗号化アルゴリズムです。 MD5 は不可逆であるため、MD5 によって計算された暗号文を使用して、逆アルゴリズムを通じて元のテキストを取得することはできません。

ウェブアプリケーションでMD5暗号化テキストパスワードを使用する本来の目的を振り返ると、データベースに保存されているパスワードが残念ながら漏洩した直後に取得されることを防ぐためです。しかし、攻撃者は膨大なパスワード辞書を所有しているだけでなく、MD5 暗号文を解読する効率的な方法である、一般的に使用されるパスワードの MD5 暗号文をすぐに見つけることができる多くの MD5 原文と暗号文の比較データベースを確立しています。ただし、MD5 暗号文データベースでは、最も一般的な MD5 暗号化アルゴリズム (元のテキスト --> MD5 --> 暗号文) が使用されます。したがって、変換された MD5 アルゴリズムを使用して、既製の MD5 暗号文データベースを無用にすることができます。


以下は、変換アルゴリズムのいくつかの例を示しています 
もちろん、他の Web 開発言語でも同様であり、同じ結果が得られます。

変換 1: Cyclic MD5

最も理解しやすい変換は、パスワードに対して複数の MD5 操作を実行することです。 2 つの仮パラメータ $data と $times を受け入れる関数をカスタマイズします。1 つ目は暗号化するパスワード、2 つ目は暗号化を繰り返す回数です。この変換を実現するには 2 つのアルゴリズムがあります -

//反復アルゴリズム
function md5_1_1($data, $times = 32)
{ i < $i++) {
$data = md5 ($data);
}
return $data;
}

//再帰アルゴリズム
function md5_1_2($data, $times = 32)
{
if ($times > Return $data;
}
}
? >

変換 2: 暗号文分割 MD5

ユーザーのパスワードは不確実な文字列ですが、MD5 を 1 回操作すると、この時点で固定長文字列を再度変換できます。やや BT アルゴリズムでは、暗号文をいくつかのセグメントに分割し、各セグメントに対して MD5 操作を実行し、次に暗号文の山を連結して非常に長い文字列にし、最後に別の MD5 操作を実行します。結果は依然として長さの暗号文です。 32ビット。

//暗号文を 2 つのセクションに分割し、各セクションの長さは 16 文字です
function md5_2_1($data)
{
//最初にパスワードを 32 文字の暗号文に暗号化します
$data = md5( $data);
//パスワードを 2 つの部分に分割します
$left = substr($data, 0, 16);
// それらを別々に暗号化します
$data = md5($left).md5($right);
//最後に長い文字列を再度暗号化して 32 文字の暗号文になります
return md5($data)
}

// パスワードを暗号化しますは 32 のセクションに分かれており、各セクションには 1 文字が含まれます
function md5_2_2($data)
{
$data = md5($data)
//ループして暗号文の各文字をインターセプトし、暗号化して接続します
for ( $ i = 0; $i < $i++) {
.= md5($data{$i}) }
//このとき、$data の長さは 1024 文字です。
Return md5($data);
}
?>

もちろん、この種の暗号文の分割には無数の固有のアルゴリズムがあります。たとえば、元の暗号文はそれぞれ 2 文字の 16 個のセグメントに分割できます。各段落は 4 文字か、各段落の文字数が等しくありません...




[1] [2] 次のページ




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。