MD5是什么?
MD5是message-digest algorithm 5(信息-摘要算法)的缩写,是一种计算机安全领域使用的一种散列函数,被广泛应用于加密和解密的技术上,它就像文件的“数字指纹”。
不管是可执行的程序、图像文件、临时文件还是其他类型的文件,都有其唯一对应的的MD5信息值。就像人的基因一样,不同的人,基因不一样。
MD5的作用:
1、通过同一个文件的MD5值,可以赖检验这个文件是否被“篡改”过。我们常常会遇到这样一个问题,下载的东西的时候,有时候下载的东西并不是我们想要的或者是有病毒,病毒可以查杀,但文件被修改了,有时候,你自己是察觉不到的。这就可以通过MD5值来校验(一般正规的网站都会提供文件的MD5值)。
2、MD5还用于操作系统的登录认证上,比如Unix.当用户登录的时候,系统将用户输入的密码以MD5进行一套算法运算,然后去和保存在文件系统中的MD5值进行比较,确定密码是否正确。
MD5的值是无法被变换成原始字符串的。因为MD5将任意长度的“字符串”映射为一个128bit的大整数,然而通过128bit的大整数反推原始字符串是很难的。
破译MD5是要用到一种叫做鸽巢原理的东西,用它来破解MD5,要创建N多个文件,从其中找出MD5相同的文件,但找出的文件的MD5相同内容不一定相同的。对于文件来说,MD5还是相当的安全,但是对于密码就一定了,如果两个人的密码的MD5相同,如果一个人的密码是a,那么另外一个人就可以用MD5相同的密码b直接登录他的账号,直接盗号。
<script type="text/javascript">// <![CDATA[ /*iteye博客内页Banner-468*60,创建于2016-5-31*/ var cpro_id = "u1405021"; // ]]></script><script type="text/javascript" src="http://cpro.baidustatic.com/cpro/ui/c.js"></script>
(1)一般使用的数据库中都会保存用户名和密码,其中密码不使用明码保存。
有时候用MD5密码,很多语言都提供了将字符串生成为MD5密码的方法或函数。MD5的加密算法是公开的。
有时候也可以用自己的字符串加密算法,这种加密算法是只有自己知道的。
(2)破解MD5的过程就是先算好大量或者所有可能的字符串的MD5数值,之后进行查询就可以破解。虽然有些网站规定了密码的位数在6~20位之间,但是要事先计算这么多是字符串并有效的组织存储、查询还是相当麻烦,相当慢 的。
因为MD5的位数是固定的,比如16,32,64,而字符串的组合与长度是无穷尽的,这就有冲突啦。但是如果知道了加密前字符串的长度是有固定范围的,比如6~20,这个还是可以破解的。
但是,如果不知道加密前字符的长度那么这就是无穷尽啦。貌似现在还没有人能够破解吧。
MD5密码破解网站 :可以百度搜索“MD5解密”
(3)下面给出了一个java生成给定字符串的MD5密码的模块程序。
import java.security.MessageDigest; public class Md5Test { public void toMD5(String plainText) { try { //生成实现指定摘要算法的 MessageDigest 对象。 MessageDigest md = MessageDigest.getInstance("MD5"); //使用指定的字节数组更新摘要。 md.update(plainText.getBytes()); //通过执行诸如填充之类的最终操作完成哈希计算。 byte b[] = md.digest(); //生成具体的md5密码到buf数组 int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } System.out.println("32位: " + buf.toString());// 32位的加密 System.out.println("16位: " + buf.toString().substring(8, 24));// 16位的加密,其实就是32位加密后的截取 } catch (Exception e) { e.printStackTrace(); } } public static void main(String agrs[]) { new Md5Test().toMD5("LXD");//加密LXD System.out.println("加密源码:LXD"); } }
相关推荐
这段代码首先获取了`MD5`算法的`MessageDigest`实例,然后对输入字符串进行哈希计算,得到16字节的哈希值。接着,通过循环将每个字节转换为两位的十六进制字符串,拼接成最终的32位MD5值。 如果要生成"36位MD5加密...
在批处理文件中,可能使用了Java的命令行工具`javac`来编译源代码,并用`java`命令运行生成的类文件,实现MD5加密功能。用户只需提供待加密的字符串,批处理文件将自动调用Java程序计算MD5值并显示结果。 总的来说...
在提供的压缩包文件“MD5”中,可能包含了一个Java程序示例,演示了如何使用MD5加密并生成32位小写的哈希值。这个程序可以作为一个基础模板,帮助开发者快速集成MD5功能到自己的项目中。 总之,MD5是一种便捷的哈希...
3. **生成MD5摘要**: - 使用`MessageDigest.getInstance("MD5")`获取MD5算法实例。 - 通过`FileInputStream`读取文件内容,并使用`while`循环逐段更新MD5摘要。 - 最终调用`digest()`方法获取摘要并返回。 4. *...
本实例将深入探讨几种常见的加密算法,包括MD5、SHA-1和SHA-256,以及如何在Java中实现它们。 MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入转化为固定长度的128位(16字节...
其优点是计算速度快,但缺点是容易遭受彩虹表攻击,即通过预先计算大量常见字符串的MD5值,快速破解哈希密码。 加盐是在原始密码上附加一个随机字符串,这个随机字符串就是盐。这样,即使两个用户有相同的密码,加...
运行`main`方法,你将看到原始字符串"Hello, MD5!"经过MD5加密后的结果。 需要注意的是,MD5虽然在历史上被广泛使用,但由于其安全性已不再满足现代密码学的要求,容易遭受碰撞攻击。因此,在存储用户密码时,通常...
开发者可以通过这个类的实例来生成MD5摘要。 3. **main类文件**: 这个压缩包可能包含了一个主程序,用于演示如何使用MD5进行加密操作。主程序通常会包含读取输入字符串,初始化`MessageDigest`对象,调用`digest...
总的来说,Java实现MD5加密是一个相对简单的过程,主要涉及到`MessageDigest`类的使用,通过调用其`getInstance()`方法获取MD5实例,然后对输入数据进行哈希处理,最后将结果转换为16进制字符串。在实际开发中,根据...
这段代码首先创建了一个 `MD5Code` 实例,然后调用 `getMD5CodeofStr` 方法传入字符串 "Hello World" 并获取其MD5散列值,最后打印出该散列值。 ### 总结 上述代码提供了一种使用Java语言实现MD5加密的基本框架。...
MD5加密工具类主要用于用户密码加密,使用公盐和私盐来生成MD5加密字符串。 在MD5加密工具类中,我们可以看到encodeByMD5方法,该方法用于将字符串转换为MD5加密字符串,使用MessageDigest类来实现MD5加密算法。...
首先,需要创建一个MD5实例,然后更新要加密的字节数组,最后获取并转换成十六进制字符串。 ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public String ...
它是通过Java的`java.security.MessageDigest`类来实现的,首先创建MD5的实例,然后更新输入字符串的字节,最后获取并转换为十六进制字符串。 2. `digest(byte[] bytes)`:此方法可能接受字节数组作为输入,进行...
这两个类结合使用,可以实现更加灵活的MD5哈希功能,比如在处理中文字符串时保证编码正确性,并根据需求生成不同长度的MD5摘要。这对于开发人员来说是非常实用的,特别是在进行数据验证或者安全相关的应用中。在使用...
在这个例子中,`encode`方法接受一个字符串,通过`MessageDigest.getInstance("MD5")`获取MD5实例,然后对字符串进行字节运算并生成摘要。最终将摘要转换成十六进制字符串返回。 需要注意的是,由于MD5的碰撞攻击...
3. 更新数据:然后,我们使用`update()`方法将要加密的字符串的字节数组传递给MD5实例。如果字符串包含非ASCII字符,可能需要先将其转换为UTF-8编码。 ```java String data = "用户信息或密码"; byte[] dataBytes = ...
首先,需要导入该类并实例化一个MD5对象,然后更新要加密的字符串的字节,最后进行哈希计算。代码示例如下: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; ...
下面是一个简单的示例代码,展示了如何使用Java生成一个字符串的MD5散列值: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Example { public ...
在上述代码中,`getInstance("MD5")`用于获取MD5实例,`update(input.getBytes())`更新输入数据,`digest()`生成摘要,`%02x`则是将字节转换为16进制字符串。 在MyEclipse-8.6这样的集成开发环境中,你可以创建一个...