ホームページ バックエンド開発 PHPチュートリアル 使用MD5变换算法防穷举(冲撞)破译密码_PHP

使用MD5变换算法防穷举(冲撞)破译密码_PHP

Jun 01, 2016 pm 12:29 PM
data md5 使用 変身 パスワード アルゴリズム

MD5是在Web应用程序中最常用的密码加密算法。由于MD5是不可逆的,因而经过MD5计算得到后的密文,不能通过逆向算法得到原文。

  回顾在Web应用程序中使用MD5加密文本密码的初衷,就是为了防止数据库中保存的密码不幸泄露后被直接获得。但攻击者不但拥有数据量巨大的密码字典,而且建立了很多MD5原文/密文对照数据库,能快速地找到常用密码的MD5密文,是破译MD5密文的高效途径。然而,MD5密文数据库所使用的是最常规的MD5加密算法:原文-->MD5-->密文。因此,我们可以使用变换的MD5算法,使现成的MD5密文数据库无所作为。


  下面演示一些变换算法的例子
当然,在其它的Web开发语言中,也大同小异,完全能得到相同的结果。

变换一:循环MD5

  最容易理解的变换就是对一个密码进行多次的MD5运算。自定义一个函数,它接受$data和$times两个形参,第一个是要加密的密码,第二个是重复加密的次数。实现这种变换有两种算法——

//迭代算法
function md5_1_1($data, $times = 32)
{
//循环使用MD5
for ($i = 0; $i $data = md5($data);
}
return $data;
}

//递归算法
function md5_1_2($data, $times = 32)
{
if ($times > 0) {
$data = md5($data);
$times--;
return md5_1_2($data, $times); //实现递归
} else {
return $data;
}
}
?>

变换二:密文分割MD5

  尽管用户的密码是不确定的字符串,但是只要经过一次MD5运算后,就会得到一个由32个字符组成的字符串,这时可以再针对这个定长字符串变换。有点BT的算法是,把这段密文分割成若干段,对每段都进行一次MD5运算,然后把这堆密文连成一个超长的字符串,最后再进行一次MD5运算,得到仍然是长度为32位的密文。

//把密文分割成两段,每段16个字符
function md5_2_1($data)
{
//先把密码加密成长度为32字符的密文
$data = md5($data);
//把密码分割成两段
$left = substr($data, 0, 16);
$right = substr($data, 16, 16);
//分别加密后再合并
$data = md5($left).md5($right);
//最后把长字串再加密一次,成为32字符密文
return md5($data);
}

//把密文分割成32段,每段1个字符
function md5_2_2($data)
{
$data = md5($data);
//循环地截取密文中的每个字符并进行加密、连接
for ($i = 0; $i $data .= md5($data{$i});
}
//这时$data长度为1024个字符,再进行一次MD5运算
return md5($data);
}
?>

  当然,这种密文分割的具体算法是数之不尽的,比如可以把原密文分割成16段每段两字符、8段每段4字符,或者每一段的字符数不相等……

变换三:附加字符串干涉
  在加密过程的一个步骤中,附加一个内容确定的字符串(比如说用户名),干涉被加密的数据。不可以用随机字串,因为这样会使原算法无法重现。这种算法在某些情况下是很具有优势的,比如说用于大量的用户密码加密,可以把用户名作为附加干涉字串,这样攻击者就算知道你的算法,也很难从他们手中的字典中一下子生成海量的对照表,然后大量地破译用户密码,只能有针对性的穷举为数不多的用户。

//附加字符串在原数据的尾部
function md5_3_1($data, $append)
{
return md5($data.$append);
}

//附加字符串在原数据的头部
function md5_3_2($data, $append)
{
return md5($append.$data);
}

//附加字符串在原数据的头尾
function md5_3_3($data, $append)
{
return md5($append.$data.$append);
}
?>

变换四:大小写变换干涉
  由于PHP所提供的md5()函数返回的密文中的英文字母全部都是小写的,因此我们可以把它们全部转为大写,然后再进行一次MD5运算。

function md5_4($data)
{
//先得到密码的密文
$data = md5($data);
//再把密文中的英文母全部转为大写
$data = strtotime($data);
//最后再进行一次MD5运算并返回
return md5($data);
}
?>

变换五:字符串次序干涉
  把MD5运算后的密文字符串的顺序调转后,再进行一次MD5运算。

function md5_5($data)
{
//得到数据的密文
$data = md5($data);
//再把密文字符串的字符顺序调转
$data = strrev($data);
//最后再进行一次MD5运算并返回
return md5($data);
}
?>

变换六、变换七、变换八……

  MD5变换算法是数之不尽的,甚至无须自己再去创造,就用上面的五个互相组合就可以搞出很BT的算法。比如说先循环加密后再分割,并在每一段上附加一个字符串再分别加密,然后变换大小写并颠倒字符串顺序后连成一个长字符串再进行MD5运算……

  如果真的很不幸,由于某些漏洞,比如说SQL Injection或者文件系统中的数据库被下载而异致用户密码数据暴露,那么MD5变换算法就能大大地增加破译出密码原文的难度,首先就是使网上很多的MD5原文/密文对照数据库(要知道,这是破译MD5最高效的方法)没有用了,然后就是使攻击者用常规算法去穷举一串由变换算法得到的密文而搞得焦头烂额。当然,MD5变换算法特别适合用于非开源的Web程序使用,虽说用在开源的程序中优势会被削弱(大家都知道算法),但是也能抑制MD5原文/密文对照数据库的作用。要进行这些复杂的变换运算,当然就要花费的更多的系统开销了,然而对于安全性要求很严格的系统来说,多付出一些来换取高一点的安全性,是完全值得的。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 で続行するために管理者のユーザー名とパスワードの入力を求められる問題を解決するにはどうすればよいですか? Windows 11 で続行するために管理者のユーザー名とパスワードの入力を求められる問題を解決するにはどうすればよいですか? Apr 11, 2024 am 09:10 AM

Win11 を使用している場合、管理者のユーザー名とパスワードの入力を要求される場合があるため、この記事ではその対処方法について説明します。方法 1: 1. [Windows ロゴ] をクリックし、[Shift+Restart] を押してセーフ モードに入るか、[スタート] メニューをクリックして [設定] を選択するという方法でセーフ モードに入ります。 「更新とセキュリティ」を選択し、「回復」で「今すぐ再起動する」を選択し、再起動してオプションを入力した後、 - トラブルシューティング - 詳細オプション - 起動設定 -&mdash を選択します。

携帯電話を使用してルーターのWiFiパスワードを設定する方法(携帯電話をツールとして使用) 携帯電話を使用してルーターのWiFiパスワードを設定する方法(携帯電話をツールとして使用) Apr 24, 2024 pm 06:04 PM

ワイヤレス ネットワークは、今日のデジタル世界で人々の生活に不可欠な部分となっています。ただし、個人のワイヤレス ネットワークのセキュリティを保護することが特に重要です。強力なパスワードを設定することは、WiFi ネットワークが他人にハッキングされないようにするための鍵となります。ネットワークのセキュリティを確保するために、この記事では、携帯電話を使用してルーターの WiFi パスワードを変更する方法を詳しく紹介します。 1. ルーター管理ページを開く - モバイルブラウザでルーター管理ページを開き、ルーターのデフォルトの IP アドレスを入力します。 2. 管理者のユーザー名とパスワードを入力します - アクセスするには、ログイン ページに正しい管理者のユーザー名とパスワードを入力します。 3. ワイヤレス設定ページに移動します。ルーター管理ページでワイヤレス設定ページを見つけてクリックし、そのページに入ります。 4.現在のWiを見つける

CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 Mar 26, 2024 pm 12:41 PM

上記および筆者の個人的な理解: 現在、自動運転システム全体において、認識モジュールが重要な役割を果たしている。道路を走行する自動運転車は、認識モジュールを通じてのみ正確な認識結果を得ることができる。下流の規制および制御モジュール自動運転システムでは、タイムリーかつ正確な判断と行動決定が行われます。現在、自動運転機能を備えた自動車には通常、サラウンドビューカメラセンサー、ライダーセンサー、ミリ波レーダーセンサーなどのさまざまなデータ情報センサーが搭載されており、さまざまなモダリティで情報を収集して正確な認識タスクを実現しています。純粋な視覚に基づく BEV 認識アルゴリズムは、ハードウェア コストが低く導入が容易であるため、業界で好まれており、その出力結果はさまざまな下流タスクに簡単に適用できます。

携帯電話のWi-Fiパスワード変更チュートリアル(簡単操作) 携帯電話のWi-Fiパスワード変更チュートリアル(簡単操作) Apr 26, 2024 pm 06:25 PM

インターネットの急速な発展に伴い、ワイヤレス ネットワークは私たちの生活に欠かせないものになりました。ただし、個人情報とネットワークのセキュリティを保護するために、Wi-Fi パスワードを定期的に変更することが非常に重要です。ホーム ネットワークのセキュリティをより適切に保護するために、この記事では、携帯電話を使用して WiFi パスワードを変更する方法に関する詳細なチュートリアルを紹介します。 1. WiFi パスワードの重要性を理解する WiFi パスワードは、インターネット時代において、個人情報とネットワーク セキュリティを保護するための第一の防御線です。その重要性を理解することで、パスワードを定期的に変更する必要がある理由をよりよく理解できます。 2. 電話機が Wi-Fi に接続されていることを確認します。まず、Wi-Fi パスワードを変更する前に、パスワードを変更する Wi-Fi ネットワークに電話機が接続されていることを確認します。 3. 電話機の設定メニューを開き、電話機の設定メニューに入ります。

Baidu Netdisk アプリの使用方法 Baidu Netdisk アプリの使用方法 Mar 27, 2024 pm 06:46 PM

クラウド ストレージは今日、私たちの日常生活や仕事に欠かせない部分になっています。中国有数のクラウド ストレージ サービスの 1 つである Baidu Netdisk は、強力なストレージ機能、効率的な伝送速度、便利な操作体験により多くのユーザーの支持を得ています。また、重要なファイルのバックアップ、情報の共有、オンラインでのビデオの視聴、または音楽の聴きたい場合でも、Baidu Cloud Disk はニーズを満たすことができます。しかし、Baidu Netdisk アプリの具体的な使用方法を理解していないユーザーも多いため、このチュートリアルでは Baidu Netdisk アプリの使用方法を詳しく紹介します。まだ混乱しているユーザーは、この記事に従って詳細を学ぶことができます。 Baidu Cloud Network Disk の使用方法: 1. インストール まず、Baidu Cloud ソフトウェアをダウンロードしてインストールするときに、カスタム インストール オプションを選択してください。

パスワードが間違っています。BitLocker の警告に注意してください パスワードが間違っています。BitLocker の警告に注意してください Mar 26, 2024 am 09:41 AM

この記事では、間違ったパスワードの問題を解決する方法、特に BitLocker の警告に対処する際の注意の必要性について説明します。この警告は、ドライブのロックを解除するために BitLocker に間違ったパスワードを複数回入力するとトリガーされます。通常、この警告は、不正なログイン試行を制限するポリシーがシステムにあるために発生します (通常、ログイン試行は 3 回まで許可されます)。この場合、ユーザーは適切な警告メッセージを受け取ります。完全な警告メッセージは次のとおりです: 入力されたパスワードが間違っています。間違ったパスワードを入力し続けると、アカウントがロックされることに注意してください。これは、データのセキュリティを保護するためです。アカウントのロックを解除する必要がある場合は、BitLocker 回復キーを使用する必要があります。パスワードが間違っています。コンピュータにログインするときに表示される BitLocker 警告に注意してください

NetEase メールボックス マスターの使用方法 NetEase メールボックス マスターの使用方法 Mar 27, 2024 pm 05:32 PM

NetEase Mailbox は、中国のネットユーザーに広く使用されている電子メール アドレスとして、その安定した効率的なサービスで常にユーザーの信頼を獲得してきました。 NetEase Mailbox Master は、携帯電話ユーザー向けに特別に作成された電子メール ソフトウェアで、電子メールの送受信プロセスが大幅に簡素化され、電子メールの処理がより便利になります。 NetEase Mailbox Master の使い方と具体的な機能について、以下ではこのサイトの編集者が詳しく紹介しますので、お役に立てれば幸いです。まず、モバイル アプリ ストアで NetEase Mailbox Master アプリを検索してダウンロードします。 App Store または Baidu Mobile Assistant で「Ne​​tEase Mailbox Master」を検索し、画面の指示に従ってインストールします。ダウンロードとインストールが完了したら、NetEase の電子メール アカウントを開いてログインします。ログイン インターフェイスは次のとおりです。

C++ での機械学習アルゴリズムの実装: 一般的な課題と解決策 C++ での機械学習アルゴリズムの実装: 一般的な課題と解決策 Jun 03, 2024 pm 01:25 PM

C++ の機械学習アルゴリズムが直面する一般的な課題には、メモリ管理、マルチスレッド、パフォーマンスの最適化、保守性などがあります。解決策には、スマート ポインター、最新のスレッド ライブラリ、SIMD 命令、サードパーティ ライブラリの使用、コーディング スタイル ガイドラインの遵守、自動化ツールの使用が含まれます。実践的な事例では、Eigen ライブラリを使用して線形回帰アルゴリズムを実装し、メモリを効果的に管理し、高性能の行列演算を使用する方法を示します。

See all articles