MD5破解 有加密方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MD5破解 有加密方法相关的知识,希望对你有一定的参考价值。

MD5.asp中的代码

<%
Private Const BITS_TO_A_BYTE = 8
Private Const BYTES_TO_A_WORD = 4
Private Const BITS_TO_A_WORD = 32

Private m_lOnBits(30)
Private m_l2Power(30)

Private Function LShift(lValue, iShiftBits)
If iShiftBits = 0 Then
LShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And 1 Then
LShift = &H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If

If (lValue And m_l2Power(31 - iShiftBits)) Then
LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
Else
LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
End If
End Function

Private Function RShift(lValue, iShiftBits)
If iShiftBits = 0 Then
RShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And &H80000000 Then
RShift = 1
Else
RShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If

RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)

If (lValue And &H80000000) Then
RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
End If
End Function

Private Function RotateLeft(lValue, iShiftBits)
RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
End Function

Private Function AddUnsigned(lX, lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult

lX8 = lX And &H80000000
lY8 = lY And &H80000000
lX4 = lX And &H40000000
lY4 = lY And &H40000000

lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)

If lX4 And lY4 Then
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult = lResult Xor lX8 Xor lY8
End If

AddUnsigned = lResult
End Function

Private Function md5_F(x, y, z)
md5_F = (x And y) Or ((Not x) And z)
End Function

Private Function md5_G(x, y, z)
md5_G = (x And z) Or (y And (Not z))
End Function

Private Function md5_H(x, y, z)
md5_H = (x Xor y Xor z)
End Function

Private Function md5_I(x, y, z)
md5_I = (y Xor (x Or (Not z)))
End Function

Private Sub md5_FF(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

Private Sub md5_GG(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub

MD5是单向加密的,也就是加密后的结果是不可逆的,目前最普遍的破解法就是暴力破解,也就是穷举所有字符的排列可能然后用MD5加密,然后得到的字符串与目标加密的字符串比较,若相等则认为这个MD5碰撞,也就是该组合是可以被冒用为密码的(并不一定是原密码,由于MD5后的结果相同,故可以冒用)。
MD5加密用到的是个单项的hash函数,记函数为f(x)
加密时有 y = f(x)计算很简单,但是x = h(y)很困难,也就是很难找到h(y)使得x = h(y)成立,所以计算碰撞时非常复杂的学科,不过最近听说中国有位女科学家已经成功破译了md5算法,名字忘了,可以去网上查一下,她成功地找到了MD5碰撞的快速算法,不过还没有公布,要写实际程序比较困难,而且需要有很好的数论知识。
参考技术A 稍微懂点计算机的人都知道md5是不可逆的加密~
即使有加密算法也不可逆,知道吗?

不过有一个办法可以破解:
一个一个试~
参考技术B MD5没有反编译的方法,你可以使用他的加密方法把你的密码加密和他的加密密码比较是不是一样

java用md5密码加密有必要吗?

目的是什么?我感觉只是转换一下而已,很容易转换一下也就能破解看到了。

有必要的,md5就是为了防止人偷窥,而当密码很短的时候,利用暴力搜索也比较容易搜索到,只有密码强度足够的情况下才有意义,你想转换也就没那么容易了。md5类hash算法的设计初衷就是单向,即不可逆。 参考技术A md5加密是不可逆的,现在虽然有破解的,但是都是强制破解。没办法谁让现在计算机这么快呢。
一般md5都用在密码上面,只要你的密码复杂度够高的话,破解还是比较困难的。
目的,主要是为了求个心安吧。
参考技术B F4813E1D0AF19C455AA572E092724C82
你把这个MD5给我破解一下。
MD5的转换是不可逆的,系统把你输入的密码转换成MD5字符串,但没有人可以把MD5字符串再转换成你的密码。数据库里面存的就是MD5字符串,验证的时候把用户输入的密码转换成MD5字符串和数据库里面的数据进行比较。所以说连数据库管理员都不知道你的密码。
参考技术C

md5加密是为了原信息的准确性,因为md5是不可逆加密。

有两个例子,比如

    存在数据库中的密码,加密后就算被人看到也不知道原密码是什么,但是可以对输入的原密码加密,然后两者比较用于验证。

    发布软件的时候同时发布md5码,防止恶意篡改原程序

本回答被提问者和网友采纳
参考技术D 数字证书
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
安全访问认证
MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面。如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5将任意长度的“字节串”映射为一个128bit的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码的Hash值覆盖原来的Hash值就行了。
正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于Unix系统中,这也是为什么Unix系统比一般操作系统更为坚固一个重要原因。

以上是关于MD5破解 有加密方法的主要内容,如果未能解决你的问题,请参考以下文章

高分求助破解md5码!~~急!~~~~~~~~~~~

md5加密密码都能破解吗?

在php5中md5在加密字符串后如何解密

在php5中md5在加密字符串后如何解密

MD5加密以及登录获取设置token

Asp.net的MD5加密,可怎么解密呢?(C#)