`
chenyuguxing
  • 浏览: 39217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于 md5 摘要

 
阅读更多

转载文章:http://www.weixuehao.com/archives/474#comments

MD5是什么

message-digest algorithm 5(信息-摘要算法)。经常说的“MD5加密”,就是它→信息-摘要算法。

在下载一下东西时,经常在一些压缩包属性里,看到md5值。而且这个下载页面,很可能会在某一个地方,写了一句,此文件的MD5值为XXXXXXXXX。这有什么作用呢?

白话白话:md5,其实就是一中算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。

所以,有人修过压缩包后,就会生成新的串,这时就可以拿网站提供的串和新生成的串对比,如果不同,那就是被人修过过了。

加密和摘要,是不一样的

加密后的消息是完整的;具有解密算法,得到原始数据;

摘要得到的消息是不完整的;通过摘要的数据,不能得到原始数据;

所以,当看到很多人说,md5,加密,解密的时候,呵呵一笑就好了。

QQ截图20150311162809

MD5长度

有人说md5,128位,32位,16位,到底md5多长?

md5的长度,默认为128bit,也就是128个0和1的二进制串。

这样表达是很不友好的。

所以将二进制转成了16进制,每4个bit表示一个16进制,

所以128/4 = 32 换成16进制表示后,为32位了。

QQ截图20150305111855

为什么网上还有md5是16位的呢?

网上有很多帖子,md5 32位 16位 加密 区别。

仔细观察admin生成的32位和16位的md5值……

查询结果:

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3

md5(admin,16) = 7a57a5a743894a0e

看出来了吧!

其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

MD5的作用

①一致性检验,最上面那个例子

②数字签名,还是最上面那个例子。只是把md5看出了一个指纹,按了个手印说明独一无二了。

③安全访问认证,这个就是平时系统设计的问题了。

在用户注册时,会将密码进行md5加密,存到数据库中。这样可以防止那些可以看到数据库数据的人,恶意操作了。

md5不能破解吗?

md5是不可逆的,也就是没有对应的算法,从生产的md5值逆向得到原始数据。

但是如果使用暴力破解,那就另说了。

md5是唯一的吗?

md5作为数据库中的主键可行吗?这就涉及到一个问题,md5值是唯一的吗?答案是,不唯一。

也就是一个原始数据,只对应一个md5值;

但是一个md5值,可能对应多个原始数据。

java中生成MD5的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class MD5Test {
//main测试类
public static void main(String[] args) {
String result = getMD5("aaa");
System.err.println(result);
}
/**
* 生成md5
* @param message
* @return
*/
public static String getMD5(String message) {
String md5str = "";
try {
//1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
MessageDigest md = MessageDigest.getInstance("MD5");
//2 将消息变成byte数组
byte[] input = message.getBytes();
//3 计算后获得字节数组,这就是那128位了
byte[] buff = md.digest(input);
//4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
md5str = bytesToHex(buff);
} catch (Exception e) {
e.printStackTrace();
}
return md5str;
}
/**
* 二进制转十六进制
* @param bytes
* @return
*/
public static String bytesToHex(byte[] bytes) {
StringBuffer md5str = new StringBuffer();
//把数组每一字节换成16进制连成md5字符串
int digital;
for (int i = 0; i < bytes.length; i++) {
digital = bytes[i];
if(digital < 0) {
digital += 256;
}
if(digital < 16){
md5str.append("0");
}
md5str.append(Integer.toHexString(digital));
}
return md5str.toString().toUpperCase();
}
}

MD5的详细算法……自己搜吧。

分享到:
评论

相关推荐

    md5+sha1摘要校验工具

    MD5算法的目的是创建一个独特的“指纹”,如果文件内容稍有改动,其MD5摘要就会完全不同,因此可以用来检测文件是否被修改。 SHA1(Secure Hash Algorithm 1)是另一种哈希函数,它生成的是160位(20字节)的摘要,...

    MD5消息摘要算法

    4. **结果合并**:经过所有块的处理后,四个初始化变量会逐步更新,最终得到的就是128位的哈希值,也就是我们常说的MD5摘要。 在Android开发中,MD5常用于文件校验、用户密码存储和数据传输的完整性验证。例如,当...

    用MD5消息摘要再用RSA进行签名

    用MD5消息摘要再用RSA进行签名~用MD5消息摘要再用RSA进行签名~用MD5消息摘要再用RSA进行签名~

    MD5 摘要算法C语言实现

    MD5 摘要算法的C语言实现,从 RFC1321 中摘出来的算法实现

    md5摘要算法的C++实现源码

    在大端字节序系统上生成的MD5摘要可以直接与小端字节序系统的摘要比较,但如果在两个系统间传输摘要,需要进行字节顺序的转换。 8. **最后的位运算**:经过四轮迭代后,将四个中间变量进行最后的位运算,然后组合成...

    VC++ 文件MD5摘要

    在VC++环境中,开发人员通常需要计算文件的MD5摘要来验证文件的完整性和未被篡改。MD5算法生成一个128位的散列值,通常以32个十六进制数字的形式表示,这使得即使是微小的数据变化也会导致生成的MD5摘要显著不同。 ...

    MD5摘要加密

    用户可以通过这些库轻松地对字符串、文件等进行MD5加密,得到的MD5摘要通常是一个32位的十六进制字符串,例如"MD5摘要加密"这个字符串的MD5值可能是"e10adc3949ba59abbe56e057f20f883e"。 总结来说,MD5摘要加密是...

    java调用MD5加密方式计算摘要值(有界面)

    在提供的"MessageSecurity"文件中,可能包含了一个具有图形用户界面(GUI)的Java应用程序,该程序允许用户输入文本并显示其MD5摘要值。这可能是为了教学目的,让用户直观地理解MD5加密的过程。这样的界面通常会包含...

    MD5_MessageDigest_java_md5_消息摘要_

    这个项目可能涵盖了从读取文件内容到计算MD5摘要的完整过程,以及如何比较两个MD5摘要以判断文件或数据是否一致。你可以解压文件,运行其中的代码,以加深对MD5在Java中应用的理解。同时,也可以参考该项目的代码...

    MD5 摘要哈希 C语言实现 dll文件

    5. 结果整合:经过所有块的处理后,将四个工作寄存器的内容合并成一个128位的MD5摘要。 将MD5算法封装到DLL文件中,需要提供对外的接口,供其他程序调用。常见的接口可能包括以下几种: - 初始化函数:创建MD5上...

    完整版数据摘要模块(MD5算法实现) 飞扬工作室.rar

    当你下载一个文件后,可以计算其MD5摘要,然后与发布者提供的MD5值进行对比。如果两者匹配,说明文件在传输过程中没有损坏或被篡改。这也是为什么MD5常用于软件下载、镜像文件校验等场景。 然而,MD5的弱点在于它...

    md5算法摘要实例

    `testMd5`可能是用以测试MD5实现的示例程序,它可能包含一段代码,读取一个文件内容,然后计算并打印出该文件的MD5摘要,以此验证算法的正确性。 使用MD5时,需要注意的是,由于MD5算法的安全性问题,它已经不再...

    MD5报文摘要算法代码

    为了创建一个完整的MD5类或函数,你需要提供一个接口,允许用户传递任意长度的字节流,并返回计算出的MD5摘要。这个接口可能包括`Update`方法用于添加数据,`Finalize`方法用于完成计算并返回摘要,以及可能的`Reset...

    MD5 摘要哈希 C语言实现

    例如,一个API可能包含`MD5_Init()`、`MD5_Update()`(用于添加更多数据)、`MD5_Final()`(生成最终摘要)和`MD5_End()`(释放资源)等函数。 需要注意的是,尽管MD5在过去的很多年里被广泛应用,但由于其已知的...

    论文:MD5摘要实现

    论文:MD5摘要实现 来自.中国科学技术大学

    C++ MD5 摘要方法工程

    这个C++ MD5摘要工程是为了帮助开发者在他们的项目中集成MD5哈希计算功能,使得能够对数据进行快速而安全的校验。 **MD5的工作原理** MD5算法通过一系列复杂的数学运算(包括位操作、异或、加法等)将任意长度的...

    MD5信息摘要算法,算法用VC++编程实现,并有示例,很清楚地明白MD5算法

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入数据转换成固定长度的128位(16字节)摘要值。这个摘要值具有不可逆性,即无法从摘要恢复原始数据,因此常用于数据完整性校验和...

    MD5 digest 算法

    2004年,Mihir Bellare和王小云分别独立地发现了MD5的碰撞攻击,这意味着两个不同的输入数据可以生成相同的MD5摘要,这严重破坏了MD5的唯一性。因此,MD5在数字签名和密码存储等方面已被更安全的算法如SHA-256取代。...

    MD5编码、MD5加密解密demo

    因此,我们通常不会说"MD5解密",而是说"MD5碰撞",即寻找两个不同的输入数据,它们的MD5摘要相同,但这在实际应用中是非常困难的,尤其是在大量数据下。 MD5的工作原理是通过一系列复杂的数学运算(包括位移、异或...

    c++MD5hash摘要源代码

    4. **结果整合**:在所有块处理完成后,A、B、C、D的状态会被转换成16个十六进制数字,这就是最终的MD5摘要。 在C++中,可以使用`unsigned char`数组来存储输入数据,并使用`unsigned int`或`uint32_t`来表示A、B、...

Global site tag (gtag.js) - Google Analytics