昨天在弄一个防止别人切取我们服务器文件的事情,其中有用到是境缀与某个字符相加然后取其md5值的场景,
后面发现用c和java得到的md5值竟然不一样,我们是如下操作的
java:MD5.getMd5(XXX)
linux: echo 'XXX' | md5sum
当时就震惊了,这时一哥们告诉我,md5算法有两种,一种是16位的一种是32位的,我当时理解为md5算法有两种实现,然后一直查相关资料也没有查到
后面发现linus md5实现应该是这样的: echo -n 'XXX' | md5sum 如果不加-n 则表示在原字符串的的最后加了一个\n 即换行,导致其值和java生成的md5值不一样
不过md5算法只有一种,但其值分16位的和32位的两种(均用16进表示)
其中16位的为32位的中间部份的值
比如:
MD5(123,32) = 202cb962ac59075b964b07152d234b70
MD5(123,16) = ac59075b964b0715
网上找的:
写道
小明 2005-4-12 17:35 注:这个小明不是我。。。。。
只是长度的区别而已!
16位加密就是从32位MD5散列中把中间16位提取出来!
就好比破解16位MD5散列不见得比破解32位MD5散列快~
因为他多了一个步骤就是加密后再把中间16位提取出来~ 然后再进行对比
而破解32位的则不需要~ 加密后直接对比~
当然以前可能会误解32位加密比16位加密安全!为什么? 因为32位的长啊~ (呵呵,真BC)
netpatch 2005-4-13 09:09
昨晚再次查阅《加密与解密》第二版,但把MD5加密算法解析看了老半天还是没得到想要的答案
现在看了 小明 兄的解释终于明白了~
唉~,菜鸟就是菜鸟~
但偶不耻而问,就是为了搞懂这个(希望大老们不要见怪)
这里谢过啦~
md5有一些什么用途:http://baike.baidu.com/view/7636.htm
写道
数字证书
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对字符串加密校验工具c++源码"是用古老的VC++6.0编译器实现的。VC++6.0是Microsoft推出的一款经典C++开发环境,尽管现在已经有一些过时,但它对于学习C++基础和理解编译器工作原理仍然很有帮助。在源码...
标题“关于MD5的一些知识”涵盖的核心知识点包括: 1. **哈希函数基础**:MD5是哈希函数的一种,它将任意大小的数据转化为固定长度的摘要。哈希函数的主要特性是快速、不可逆和雪崩效应,即输入的微小变化会导致...
标签“MD5”进一步确认了这个话题是关于MD5散列算法的。 压缩包内的文件“卸载l.cmd”和“安装l.cmd”很可能是批处理脚本,用于在Windows系统上安装和卸载右键扩展功能。这些脚本通常包含一系列命令行指令,用于...
根据提供的文件信息,本文将详细解析“VB6中的MD5加密文件”的实现原理与关键步骤。MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,它可以将任意长度的消息转换为一个固定长度(通常为128位)的...
关于MD5的弱点,虽然MD5曾被认为是安全的,但近年来已经发现了一些碰撞攻击,即不同的输入可以生成相同的MD5哈希值。因此,在安全性要求极高的场合,MD5已经不再推荐使用,更安全的选择是SHA-256等更复杂的哈希函数...
md5验证源代码,带有野详细的说明注释,很好的帮助工具
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,由计算机科学家Ronald Rivest在1991年设计。它主要的功能是将任意长度的数据转化为一个固定长度的128位(16字节)的摘要,通常以32位十六进制数的形式...
在提供的压缩包文件中,"MD5.doc"可能是关于MD5算法的详细文档,涵盖了MD5的基本概念、工作原理以及在ASP环境下的应用实例;"MD5算法的ASP实现.pdf"则可能包含了具体的代码示例,指导如何在ASP中编写和使用MD5加密的...
以下是一些关于MD5工具类的关键知识点: 1. **MD5原理**:MD5算法基于信息摘要理论,它通过特定的数学运算对输入数据进行处理,生成一个唯一的指纹。这个指纹对原始数据是高度敏感的,即使微小的改动也会导致完全...
关于MD5算法破解对实际应用影响的讨论.doc
java实现md5 加密解密(在网络中MD5是著名的不可逆算法,但是如果知道MD5的加密的字符串 则可以通过自己的加密算法对明文进行加密,对加密后的密文与字符串匹配; 匹配成功,表示找到明文;但是此程序的时间耗费较高!仅...
`Doom3 Md5 model format.doc`可能提供了关于MD5模型格式的详细文档,包括数据结构和编码规则,对于理解MD5模型和`Md5Loader`的实现非常有帮助。同时,`Loader`可能是实现`Md5Loader`功能的源代码文件,包含了上述...
`md5.gif`可能是关于MD5算法的图形解释,而`rfc1321.html`和`rfc1321.txt`是RFC1321文档,这是MD5算法的官方标准描述。`index.html`可能是一个简单的网页,用于介绍或展示这些文件,`Makefile`则是构建过程的配置...
标签“md5源码”表明这是一个关于MD5算法的原始代码实现,可能适用于学习、教学或者在自己的项目中使用。在实际应用中,你可以通过这个源码理解MD5的工作原理,也可以将其集成到你的C程序中,用于文件完整性检查、...
1. "www.pudn.com.txt":这可能是一个文本文件,可能包含了关于MD5算法的使用说明、示例代码或其他相关资源的链接,源自网站pudn.com,这是一个分享编程资源的平台。 2. "Md5":根据上下文,这很可能是实现了MD5算法...
标签“md5”进一步确认了主题是关于MD5哈希算法。 压缩包文件“SparkMD5-master”很可能包含了一个名为SparkMD5的JavaScript库的源代码。SparkMD5是一个快速、高效的MD5实现,适合在浏览器环境中使用,它能够处理大...
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,由Ronald L. Rivest在1990年代初开发,它基于先前的MD2、MD3和MD4算法。MD5的主要目的是生成一段信息的数字摘要,这个摘要具有唯一性,可用于验证数据...
在描述中提到的“博文链接:https://jiangyongyuan.iteye.com/blog/1652310”,这可能是一个关于MD5校验和实际应用的博客文章,作者分享了如何生成和验证MD5校验和的具体步骤和实践经验。由于链接无法直接访问,我们...