백엔드 개발 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 11에서 계속하려면 관리자 사용자 이름과 비밀번호를 입력하라는 메시지가 표시되는 문제를 해결하는 방법은 무엇입니까? Windows 11에서 계속하려면 관리자 사용자 이름과 비밀번호를 입력하라는 메시지가 표시되는 문제를 해결하는 방법은 무엇입니까? Apr 11, 2024 am 09:10 AM

Win11 시스템을 사용할 때 관리자 사용자 이름과 비밀번호를 입력하라는 메시지가 표시되는 경우가 있습니다. 이 문서에서는 이 상황을 처리하는 방법에 대해 설명합니다. 방법 1: 1. [Windows 로고]를 클릭한 다음 [Shift+다시 시작]을 눌러 안전 모드로 들어가거나 이 방법으로 안전 모드로 들어갑니다. 시작 메뉴를 클릭하고 설정을 선택합니다. "업데이트 및 보안"을 선택하고 "복구"에서 "지금 다시 시작"을 선택한 후 옵션을 입력하고 - 문제 해결 - 고급 옵션 - 시작 설정 -&mdash를 선택하세요.

휴대폰을 사용하여 라우터 WiFi 비밀번호를 설정하는 방법(휴대폰을 도구로 사용) 휴대폰을 사용하여 라우터 WiFi 비밀번호를 설정하는 방법(휴대폰을 도구로 사용) Apr 24, 2024 pm 06:04 PM

무선 네트워크는 오늘날의 디지털 세계에서 사람들의 삶에 없어서는 안 될 부분이 되었습니다. 그러나 개인 무선 네트워크의 보안을 보호하는 것은 특히 중요합니다. 강력한 비밀번호를 설정하는 것은 다른 사람이 WiFi 네트워크를 해킹할 수 없도록 하는 열쇠입니다. 네트워크 보안을 보장하기 위해 이 기사에서는 휴대폰을 사용하여 라우터 WiFi 비밀번호를 변경하는 방법을 자세히 소개합니다. 1. 공유기 관리 페이지 열기 - 모바일 브라우저에서 공유기 관리 페이지를 열고 공유기의 기본 IP 주소를 입력하세요. 2. 관리자 사용자 이름과 비밀번호를 입력하세요. - 액세스 권한을 얻으려면 로그인 페이지에 올바른 관리자 사용자 이름과 비밀번호를 입력하세요. 3. 무선 설정 페이지로 이동합니다. 라우터 관리 페이지에서 무선 설정 페이지를 찾아 클릭하여 들어갑니다. 4. 현재 Wi-Fi 찾기

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. Wi-Fi 비밀번호의 중요성을 이해하세요. Wi-Fi 비밀번호는 개인정보와 네트워크 보안을 보호하는 첫 번째 방어선입니다. 인터넷 시대에 그 중요성을 이해하면 비밀번호를 정기적으로 변경해야 하는 이유를 더 잘 이해할 수 있습니다. 2. 휴대폰이 Wi-Fi에 연결되어 있는지 확인하세요. 먼저 Wi-Fi 비밀번호를 변경하기 전에 비밀번호를 변경하려는 Wi-Fi 네트워크에 휴대폰이 연결되어 있는지 확인하세요. 3. 휴대폰의 설정 메뉴를 열고 휴대폰의 설정 메뉴로 들어갑니다.

Baidu Netdisk 앱 사용 방법 Baidu Netdisk 앱 사용 방법 Mar 27, 2024 pm 06:46 PM

오늘날 클라우드 스토리지는 우리의 일상 생활과 업무에 없어서는 안 될 부분이 되었습니다. 중국 최고의 클라우드 스토리지 서비스 중 하나인 Baidu Netdisk는 강력한 스토리지 기능, 효율적인 전송 속도 및 편리한 운영 경험으로 많은 사용자의 호감을 얻었습니다. 중요한 파일을 백업하고, 정보를 공유하고, 온라인으로 비디오를 시청하고, 음악을 듣고 싶은 경우 Baidu Cloud Disk는 귀하의 요구를 충족할 수 있습니다. 그러나 많은 사용자가 Baidu Netdisk 앱의 구체적인 사용 방법을 이해하지 못할 수 있으므로 이 튜토리얼에서는 Baidu Netdisk 앱 사용 방법을 자세히 소개합니다. Baidu 클라우드 네트워크 디스크 사용 방법: 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에서 "NetEase Mailbox Master"를 검색한 후 안내에 따라 설치하세요. 다운로드 및 설치가 완료되면 NetEase 이메일 계정을 열고 로그인합니다. 로그인 인터페이스는 아래와 같습니다.

BTCC 튜토리얼: BTCC 교환에서 MetaMask 지갑을 바인딩하고 사용하는 방법은 무엇입니까? BTCC 튜토리얼: BTCC 교환에서 MetaMask 지갑을 바인딩하고 사용하는 방법은 무엇입니까? Apr 26, 2024 am 09:40 AM

MetaMask(중국어로 Little Fox Wallet이라고도 함)는 무료이며 호평을 받는 암호화 지갑 소프트웨어입니다. 현재 BTCC는 MetaMask 지갑에 대한 바인딩을 지원합니다. 바인딩 후 MetaMask 지갑을 사용하여 빠르게 로그인하고 가치를 저장하고 코인을 구매할 수 있으며 첫 바인딩에는 20 USDT 평가판 보너스도 받을 수 있습니다. BTCCMetaMask 지갑 튜토리얼에서는 MetaMask 등록 및 사용 방법, BTCC에서 Little Fox 지갑을 바인딩하고 사용하는 방법을 자세히 소개합니다. MetaMask 지갑이란 무엇입니까? 3천만 명 이상의 사용자를 보유한 MetaMask Little Fox Wallet은 오늘날 가장 인기 있는 암호화폐 지갑 중 하나입니다. 무료로 사용할 수 있으며 확장으로 네트워크에 설치할 수 있습니다.

See all articles