md6算法
① MacOS涓嬩娇鐢∣penSSL锛圠ibreSSL锛
OpenSSL 鏄涓涓瀹夊叏濂楁帴瀛楀眰瀵嗙爜搴掳纴锲婃嫭涓昏佺殑瀵嗙爜绠楁硶銆佸父鐢ㄧ殑瀵嗛挜鍜岃瘉涔﹀皝瑁呯$悊锷熻兘鍙奡SL鍗忚锛屽苟鎻愪緵涓板瘜镄勫簲鐢ㄧ▼搴忎緵娴嬭瘯鎴栧叾瀹幂洰镄勪娇鐢ㄣ
镊狾penSSL鐖嗗嚭钬滃绩鑴忓け琛钬濇纺娲炲悗鍏呜~锛岃娴鏋滃凡灏嗗师链夌殑 OpenSSL 镟挎崲涓 LibreSSL銆
灏嗛暱搴︿笉锲哄畾镄勬秷鎭锛圡essage锛変綔涓鸿緭鍏ュ弬鏁帮纴杩愯岀壒瀹氱殑Hash鍑芥暟锛岀敓鎴愬浐瀹氶暱搴︾殑杈揿嚭锛岃繖涓杈揿嚭灏辨槸Hash锛屼篃绉颁负杩欎釜娑堟伅镄勬秷鎭鎽樿侊纸Message Digest锛
甯哥敤镄勫崟钖戝搱甯岀畻娉曟湁锛 md5, sha1, sha256, sha512绛夈
MD5绠楁硶涓128浣嶏纴SHA-1涓160浣嶏纴SHA-256涓256浣嶃
锷犲瘑镄勬秷鎭鎽樿丠MAC锛𪢮eyed Hash Message Authentication Code锛
涓婇溃鎻愬埌镄勫父瑙凥ash绠楁硶锛屽侻D5銆丼HA锛屽彧链変竴涓杈揿叆鍙傛暟锛氭秷鎭銆
濡傛灉杈揿叆鍙傛暟链変袱涓锛屼竴涓鏄娑堟伅锛圡essage锛夛纴鍙︿竴涓鏄绉橀挜锛𪢮ey锛夛纴灏嗕细鐢熸垚涓涓锷犲瘑镄勬秷鎭鎽樿丠MAC銆
涓轰简澧炲己HMAC镄勫畨鍏ㄦэ纴鍙瑕佸崌绾у姞瀵咹ash绠楁硶灏卞彲浠ユ寚鏁扮骇鍦板炲姞镰磋В闅惧害銆备緥濡侣MAC-MD6, HMAC-SHA-3銆
镟剧粡链変竴娆¢溃璇曪纴闱㈣瘯瀹橀梾鍒板瘑镰佸︺佹晱鍦嗗搱甯屽嚱鏁般侀伩鍏岖版挒鐩稿叧镄勯梾棰樸
鐢变簬鍝埚笇鍑芥暟鏄灏嗘墍链変笉瀹氶暱镞忔嬁鑵旂殑娑堟伅杞鎹㈡垚瀹氶暱镄勬秷鎭锛屾墍浠ユ秷鎭瀹归噺涓瀹氩彉灏忎简锛屼篃链夋湁鍙戠敓纰版挒镄勫彲鑳姐傝繖镞跺彲浠ラ氲繃澶氢釜鍝埚笇鍑芥暟浜ゅ弶楠岃瘉𨱒ヨ繘涓姝ラ檷浣庡彂鐢熺殑鍙鑳芥с
甯哥敤鍙傛暟锛 -aes-128-cbc, -aes-128-cfb, -bf-cbc绛夈
鍏朵腑瀵嗙爜绠楁硶锛歜f, cast, des, aes, rs2绛夈
锷犲瘑妯″纺锛歝bc, ecb, cfb, ofb绛夈
锷犲瘑绠楁硶锛坈ipher锛夛纴锷犲瘑妯″纺锛坋ncryption mode锛夛纴濉鍏咃纸padding锛夛纴鍒濆嫔悜閲忥纸IV锛
涓婇溃鎻愬埌镄勭粰娑堟伅锷犺В瀵嗛櫎浜嗛渶瑕佸姞瀵嗙畻娉昦es/des绛変箣澶栵纴杩橀渶瑕佸姞瀵嗘ā寮廵cb/cbc绛夈
瀵圭О锷犲瘑阃氩父链夊洓绉嶆ā寮忥纸ECB銆丆BC銆丆FB銆丱FB锛
② MD5加密问题
1.如果是一般的话只有32&16
2.本来在理论上不可破解,但好像被人破解了,你可以看下参考
目前网上的dm5破解都是通过建立数据库进行查询的方法进行破解的
好像还没有直接破解的工具,网上的都属于类似穷举的方法
MD5简介
MD5的全称是Message-digest Algorithm 5(信息-摘要算法),用于确保信息传输完整一致。在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc,的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和c语言源代码在Internet RFC 1321中有详细的描述(http://www.ietf.org/rfc/rfc1321.txt),这是一份最权威的文档,由Ronald L. Rivest在1992年8月向IETF提交。
Rivest在1989年开发出MD2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。后来,Rogier和Chauvaud发现如果忽略了检验和将产生MD2冲突。MD2算法的加密后结果是唯一的--即没有重复。
为了加强算法的安全性,Rivest在1990年又开发出MD4算法。MD4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod 512 = 448)。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位damg?rd/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。Den boer和Bosselaers以及其他人很快的发现了攻击MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到MD4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果)。毫无疑问,MD4就此被淘汰掉了。
尽管MD4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
一年以后,即1991年,Rivest开发出技术上更为趋近成熟的md5算法。它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。虽然MD5比MD4稍微慢一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息-摘要的大小和填充的必要条件与MD5完全相同。Den boer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。
Van oorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-force hash function),而且他们猜测一个被设计专门用来搜索MD5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代MD5算法的MD6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响MD5的安全性。上面所有这些都不足以成为MD5的在实际应用中的问题。并且,由于MD5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,MD5也不失为一种非常优秀的中间技术),MD5怎么都应该算得上是非常安全的了。
2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。
令世界顶尖密码学家想象不到的是,破解MD5之后,2005年2月,王小云教授又破解了另一国际密码SHA-1。因为SHA-1在美国等国际社会有更加广泛的应用,密码被破的消息一出,在国际社会的反响可谓石破天惊。换句话说,王小云的研究成果表明了从理论上讲电子签名可以伪造,必须及时添加限制条件,或者重新选用更为安全的密码标准,以保证电子商务的安全。
MD5破解工程权威网站http://www.md5crk.com/ 是为了公开征集专门针对MD5的攻击而设立的,网站于2004年8月17日宣布:“中国研究人员发现了完整MD5算法的碰撞;Wang, Feng, Lai与Yu公布了MD5、MD4、HAVAL-128、RIPEMD-128几个 Hash函数的碰撞。这是近年来密码学领域最具实质性的研究进展。使用他们的技术,在数个小时内就可以找到MD5碰撞。……由于这个里程碑式的发现,MD5CRK项目将在随后48小时内结束”。
MD5用的是哈希函数,在计算机网络中应用较多的不可逆加密算法有RSA公司发明的MD5算法和由美国国家技术标准研究所建议的安全散列算法SHA.
[编辑本段]算法的应用
MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:
MD5 (tanajiya.tar.gz) =
这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。
我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码覆盖原来的就行了。
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系统比一般操作系统更为坚固一个重要原因。
③ 密文是什么 具体给我讲解一下
密文是相对于明文说的,明文其实就是你要传达的消息,而明文通过加密之后就成了密文,密文其实是信息安全的一个词汇。帮你介绍一下。
信息安全的发展历史
通信保密科学的诞生
古罗马帝国时期的Caesar密码:能够将明文信息变换为人们看不懂的字符串,(密文),当密文传到伙伴手中时,又可方便的还原为原来的明文形式。 Caesar密码由明文字母循环移3位得到。
1568年,L.Battista发明了多表代替密码,并在美国南北战争期间有联军使用。例:Vigenere密码和Beaufort密码
1854年,Playfair发明了多字母代替密码,英国在第一次世界大战中使用了此密码。例:Hill密码,多表、多字母代替密码成为古典密码学的主流。
密码破译技术(密码分析)的发展:例:以1918年W.Friedman使用重合指数破译多表代替密码技术为里程碑。 1949年C.Shannon的《保密系统的通信理论》文章发表在贝尔系统技术杂志上。这两个成果为密码学的科学研究奠定了基础。从艺术变为科学。实际上,这就是通信保密科学的诞生,其中密码是核心技术。
公钥密码学革命
25年之后,20世纪70年代,IBM公司的DES(美国数据加密标准)和1976年Diffie-Hellman,提出了公开密钥密码思想,1977年公钥密码算法RSA的提出为密码学的发展注入了新的活力。
公钥密码掀起了一场革命,对信息安全有三方面的贡献:首次从计算复杂性上刻画了密码算法的强度,突破了Shannon仅关心理论强度的局限性;他将传统密码算法中两个密钥管理中的保密性要求,转换为保护其中一格的保密性及另一格的完整性的要求;它将传统密码算法中密钥归属从通信两方变为一个单独的用户,从而使密钥的管理复杂度有了较大下降。
公钥密码的提出,注意:一是密码学的研究逐步超越了数据的通信保密范围,开展了对数据的完整性、数字签名等技术的研究;二是随着计算机和网络的发展,密码学一逐步成为计算机安全、网络安全的重要支柱,使得数据安全成为信息安全的全新内容,超越了以往物理安全占据计算机安全的主导地位状态。
访问控制技术与可信计算机评估准则
1969年,B.Lampson提出了访问控制模型。
1973年,D.Bell 和L.Lapala,创立了一种模拟军事安全策略的计算机操作模型,这是最早也是最常用的一种计算机多级安全模型。
1985年,美国国防部在Bell-Lapala模型的基础上提出了可信计算机评估准则(通常称为橘皮书)。按照计算机系统的安全防护能力,分成8个等级。
1987年,Clark-Wilson模型针对完整性保护和商业应用提出的。
信息保障
1998年10月,美国国家安全局(NSA)颁布了信息保障技术框架1.1版,2003年2月6日,美国国防部(DOD)颁布了信息保障实施命令8500.2,从而信息保障成为美国国防组织实施信息化作战的既定指导思想。
信息保障(IA:information assurance):通过确保信息的可用性、完整性、可识别性、保密性和抵赖性来保护信息系统,同时引入保护、检测及响应能力,为信息系统提供恢复功能。这就是信息保障模型PDRR。
protect保护、detect检测、react响应、restore 恢复
美国信息保障技术框架的推进使人们意识到对信息安全的认识不要停留在保护的框架之下,同时还需要注意信息系统的检测和响应能力。
2003年,中国发布了《国家信息领导小组关于信息安全保障工作的意见》,这是国家将信息安全提到战略高度的指导性文件
信息保密技术的研究成果:
发展各种密码算法及其应用:
DES(数据加密标准)、RSA(公开密钥体制)、ECC(椭圆曲线离散对数密码体制)等。
计算机信息系统安全模型和安全评价准则:
访问监视器模型、多级安全模型等;TCSEC(可信计算机系统评价准则)、ITSEC(信息技术安全评价准则)等。
加密(Encryption)
加密是通过对信息的重新组合,使得只有收发双方才能解码并还原信息的一种手段。
传统的加密系统是以密钥为基础的,这是一种对称加密,也就是说,用户使用同一个密钥加密和解密。
目前,随着技术的进步,加密正逐步被集成到系统和网络中,如IETF正在发展的下一代网际协议IPv6。硬件方面,Intel公司也在研制用于PC机和服务器主板的加密协处理器。
身份认证(Authentication)
防火墙是系统的第一道防线,用以防止非法数据的侵入,而安全检查的作用则是阻止非法用户。有多种方法来鉴别一个用户的合法性,密码是最常用的,但由于有许多用户采用了很容易被猜到的单词或短语作为密码,使得该方法经常失效。其它方法包括对人体生理特征(如指纹)的识别,智能IC卡和USB盘。
数字签名(Digital Signature)
数字签名可以用来证明消息确实是由发送者签发的,而且,当数字签名用于存储的数据或程序时,可以用来验证数据或程序的完整性。
美国政府采用的数字签名标准(Digital Signature Standard,DSS)使用了安全哈希运算法则。用该算法对被处理信息进行计算,可得到一个160位(bit)的数字串,把这个数字串与信息的密钥以某种方式组合起来,从而得到数字签名。
内容检查(Content Inspection)
即使有了防火墙、身份认证和加密,人们仍担心遭到病毒的攻击。有些病毒通过E-mail或用户下载的ActiveX和Java小程序(Applet)进行传播,带病毒的Applet被激活后,又可能会自动下载别的Applet。现有的反病毒软件可以清除E-mail病毒,对付新型Java和ActiveX病毒也有一些办法,如完善防火墙,使之能监控Applet的运行,或者给Applet加上标签,让用户知道他们的来源。
介绍一些加密的知识
密钥加/解密系统模型
在1976年,Diffie及Hellman发表其论文“New Directions in Cryptography”[9]之前,所谓的密码学就是指对称密钥密码系统。因为加/解密用的是同一把密钥,所以也称为单一密钥密码系统。
这类算法可谓历史悠久,从最早的凯撒密码到目前使用最多的DES密码算法,都属于单一密钥密码系统。
通常,一个密钥加密系统包括以下几个部分:
① 消息空间M(Message)
② 密文空间C(Ciphertext)
③ 密钥空间K(Key)
④ 加密算法E(Encryption Algorithm)
⑤ 解密算法D(Decryption Algorithm)
消息空间中的消息M(称之为明文)通过由加密密钥K1控制的加密算法加密后得到密文C。密文C通过解密密钥K2控制的解密算法又可恢复出原始明文M。即:
EK1(M)=C
DK2(C)=M
DK2(EK1(M))=M
概念:
当算法的加密密钥能够从解密密钥中推算出来,或反之,解密密钥可以从加密密钥中推算出来时,称此算法为对称算法,也称秘密密钥算法或单密钥算法;
当加密密钥和解密密钥不同并且其中一个密钥不能通过另一个密钥推算出来时,称此算法为公开密钥算法。
1.凯撒密码变换
更一般化的移位替代密码变换为
加密:E(m)=(m+k) mod 26
解密:D(c)=(c-k) mod 26
2.置换密码
在置换密码中,明文和密文的字母保持相同,但顺序被打乱了。在简单的纵行置换密码中,明文以固定的宽度水平地写在一张图表纸上,密文按垂直方向读出;解密就是将密文按相同的宽度垂直地写在图表纸上,然后水平地读出明文。例如:
明文:encryption is the transformation of data into some unreadable form
密文:eiffob nsodml ctraee rhmtuf yeaano pttirr trinem iaota onnod nsosa
20世纪40年代,Shannon提出了一个常用的评估概念。特认为一个好的加密算法应具有模糊性和扩散性。
模糊性:加密算法应隐藏所有的局部模式,即,语言的任何识别字符都应变得模糊,加密法应将可能导致破解密钥的提示性语言特征进行隐藏;
扩散性:要求加密法将密文的不同部分进行混合,是任何字符都不在其原来的位置。
加密算法易破解的原因是未能满足这两个Shannon条件。
数据加密标准(DES)
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算.
具体方法 需要图 我放不上去对不起了
可以将DES算法归结如下:
子密钥生成:
C[0]D[0] = PC–1(K)
for 1 <= i <= 16
{C[i] = LS[i](C[i−1])
D[i] = LS[i](D[i−1])
K[i] = PC–2(C[i]D[i])}
加密过程:
L[0]R[0] = IP(x)
for 1 <= i <= 16
{L[i] = R[i−1]
R[i] = L[i−1] XOR f (R[i−1], K[i])}
c= IP−1(R[16]L[16])v
解密过程:
R[16]L[16] = IP(c)
for 1 <= i <= 16
{R[i−1] = L[i]
L[i−1] = R[i] XOR f (L[i], K[i])}
x= IP−1(L[0]R[0])
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,但幸运的是当时大多数黑客并没有足够的设备制造出这种硬件设备。
在1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。 但是,当今的计算机速度越来越快了,制造一台这样特殊的机器的花费已经降到了十万美元左右,所以用它来保护十亿美元的银行间线缆时,就会仔细考虑了。另一个方面,如果只用它来保护一台服务器,那么DES确实是一种好的办法,因为黑客绝不会仅仅为入侵一个服务器而花那么多的钱破解DES密文。由于现在已经能用二十万美圆制造一台破译DES的特殊的计算机,所以现在再对要求“强壮”加密的场合已经不再适用了
DES算法的应用误区
DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。
由上述DES算法介绍我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、......64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,......64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16,24,......64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的8,16,24,..... .64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。
A5 算 法
序列密码简介
序列密码又称流密码,它将明文划分成字符(如单个字母)或其编码的基本单元(如0、1),然后将其与密钥流作用以加密,解密时以同步产生的相同密钥流实现。
序列密码强度完全依赖于密钥流产生器所产生的序列的随机性和不可预测性,其核心问题是密钥流生成器的设计。而保持收发两端密钥流的精确同步是实现可靠解密的关键技术。
A5算法
A5算法是一种序列密码,它是欧洲GSM标准中规定的加密算法,用于数字蜂窝移动电话的加密,加密从用户设备到基站之间的链路。A5算法包括很多种,主要为A5/1和A5/2。其中,A5/1为强加密算法,适用于欧洲地区;A5/2为弱加密算法,适用于欧洲以外的地区。这里将详细讨论A5/1算法。
A5/1算法的主要组成部分是三个长度不同的线性反馈移位寄存器(LFSR)R1、R2和R3,其长度分别为19、22和23。三个移位寄存器在时钟的控制下进行左移,每次左移后,寄存器最低位由寄存器中的某些位异或后的位填充。各寄存器的反馈多项式为:
R1:x18+x17+x16+x13
R2:x21+x20
R3:x22+x21+x20+x7
A5算法的输入是64位的会话密钥Kc和22位的随机数(帧号)。
IDEA
IDEA即国际数据加密算法,它的原型是PES(Proposed Encryption Standard)。对PES改进后的新算法称为IPES,并于1992年改名为IDEA(International Data Encryption Algorithm)。
IDEA是一个分组长度为64位的分组密码算法,密钥长度为128位,同一个算法即可用于加密,也可用于解密。
IDEA的加密过程包括两部分:
(1) 输入的64位明文组分成四个16位子分组:X1、X2、X3和X4。四个子分组作为算法第一轮的输入,总共进行八轮的迭代运算,产生64位的密文输出。
(2) 输入的128位会话密钥产生八轮迭代所需的52个子密钥(八轮运算中每轮需要六个,还有四个用于输出变换)
子密钥产生:输入的128位密钥分成八个16位子密钥(作为第一轮运算的六个和第二轮运算的前两个密钥);将128位密钥循环左移25位后再得八个子密钥(前面四个用于第二轮,后面四个用于第三轮)。这一过程一直重复,直至产生所有密钥。
IDEA的解密过程和加密过程相同,只是对子密钥的要求不同。下表给出了加密子密钥和相应的解密子密钥。
密钥间满足:
Zi(r) ⊙ Zi(r) −1=1 mod (216+1)
−Zi(r) + Zi(r) =0 mod (216+1)
Blowfish算法
Blowfish是Bruce Schneier设计的,可以免费使用。
Blowfish是一个16轮的分组密码,明文分组长度为64位,使用变长密钥(从32位到448位)。Blowfish算法由两部分组成:密钥扩展和数据加密。
1. 数据加密
数据加密总共进行16轮的迭代,如图所示。具体描述为(将明文x分成32位的两部分:xL, xR)
for i = 1 to 16
{
xL = xL XOR Pi
xR = F(xL) XOR xR
if
{
交换xL和xR
}
}
xR = xR XOR P17
xL = xL XOR P18
合并xL 和xR
其中,P阵为18个32位子密钥P1,P2,…,P18。
解密过程和加密过程完全一样,只是密钥P1,P2,…,P18以逆序使用。
2. 函数F
把xL分成四个8位子分组:a, b, c 和d,分别送入四个S盒,每个S盒为8位输入,32位输出。四个S盒的输出经过一定的运算组合出32位输出,运算为
F(xL) =((S1,a + S2,b mod 232) XOR S3,c) + S4,d mod 232
其中,Si,x表示子分组x(x=a、b、c或d)经过Si (i=1、2、3或4)盒的输出。
没有太多地方写了,不把整个过程列上面了,就简单介绍一下好了。
GOST算法
GOST是前苏联设计的分组密码算法,为前苏联国家标准局所采用,标准号为:28147–89[5]。
GOST的消息分组为64位,密钥长度为256位,此外还有一些附加密钥,采用32轮迭代。
RC5算法
RC5是一种分组长度、密钥长度和加密迭代轮数都可变的分组密码体制。RC5算法包括三部分:密钥扩展、加密算法和解密算法。
PKZIP算法
PKZIP加密算法是一个一次加密一个字节的、密钥长度可变的序列密码算法,它被嵌入在PKZIP数据压缩程序中。
该算法使用了三个32位变量key0、key1、key2和一个从key2派生出来的8位变量key3。由密钥初始化key0、key1和key2并在加密过程中由明文更新这三个变量。PKZIP序列密码的主函数为updata_keys()。该函数根据输入字节(一般为明文),更新三个32位的变量并获得key3。
重点:单向散列函数
MD5 算 法
md5的全称是message-digestalgorithm5(信息-摘要算法),在90年代初由和rsadatasecurityinc的ronaldl.rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是md2、md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但md2的设计与md4和md5完全不同,那是因为md2是为8位机器做过设计优化的,而md4和md5却是面向32位的电脑。
rivest在1989年开发出md2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。后来,rogier和chauvaud发现如果忽略了检验和将产生md2冲突。md2算法的加密后结果是唯一的--既没有重复。 为了加强算法的安全性,rivest在1990年又开发出md4算法。md4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod512=448)。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位damg?rd/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。denboer和bosselaers以及其他人很快的发现了攻击md4版本中第一步和第三步的漏洞。dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到md4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果)。毫无疑问,md4就此被淘汰掉了。 尽管md4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用。除了md5以外,其中比较有名的还有sha-1、ripe-md以及haval等。
一年以后,即1991年,rivest开发出技术上更为趋近成熟的md5算法。它在md4的基础上增加了"安全-带子"(safety-belts)的概念。虽然md5比md4稍微慢一些,但却更为安全。这个算法很明显的由四个和md4设计有少许不同的步骤组成。在md5算法中,信息-摘要的大小和填充的必要条件与md4完全相同。denboer和bosselaers曾发现md5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。 vanoorschot和wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-forcehashfunction),而且他们猜测一个被设计专门用来搜索md5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代md5算法的md6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响md5的安全性。上面所有这些都不足以成为md5的在实际应用中的问题。并且,由于md5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,md5也不失为一种非常优秀的中间技术),md5怎么都应该算得上是非常安全的了。
算法
MD表示消息摘要(Message Digest)。MD5是MD4的改进版,该算法对输入的任意长度消息产生128位散列值(或消息摘要。MD5算法可用图4-2表示。
对md5算法简要的叙述可以为:md5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
1) 附加填充位
首先填充消息,使其长度为一个比512的倍数小64位的数。填充方法:在消息后面填充一位1,然后填充所需数量的0。填充位的位数从1~512。
2) 附加长度
将原消息长度的64位表示附加在填充后的消息后面。当原消息长度大于264时,用消息长度mod 264填充。这时,消息长度恰好是512的整数倍。令M[0 1…N−1]为填充后消息的各个字(每字为32位),N是16的倍数。
3) 初始化MD缓冲区
初始化用于计算消息摘要的128位缓冲区。这个缓冲区由四个32位寄存器A、B、C、D表示。寄存器的初始化值为(按低位字节在前的顺序存放):
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
4) 按512位的分组处理输入消息
这一步为MD5的主循环,包括四轮,如图4-3所示。每个循环都以当前的正在处理的512比特分组Yq和128比特缓冲值ABCD为输入,然后更新缓冲内容。
四轮操作的不同之处在于每轮使用的非线性函数不同,在第一轮操作之前,首先把A、B、C、D复制到另外的变量a、b、c、d中。这四个非线性函数分别为(其输入/输出均为32位字):
F(X,Y,Z) = (XY)((~X) Z)
G(X,Y,Z) = (XZ)(Y(~Z))
H(X,Y,Z) = XYZ
I(X,Y,Z) = Y(X(~Z))
其中,表示按位与;表示按位或;~表示按位反;表示按位异或。
此外,由图4-4可知,这一步中还用到了一个有64个元素的表T[1..64],T[i]=232×abs(sin(i)),i的单位为弧度。
根据以上描述,将这一步骤的处理过程归纳如下:
for i = 0 to N/16−1 do
/* 每次循环处理16个字,即512字节的消息分组*/
/*把第i个字块(512位)分成16个32位子分组拷贝到X中*/
for j = 0 to 15 do
Set X[j] to M[i*16+j]
end /*j 循环*/
/*把A存为AA,B存为BB,C存为CC,D存为DD*/
AA = A
BB = B
CC = C
DD = D
/* 第一轮*/
/* 令[abcd k s i]表示操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
其中,Y<<<s表示Y循环左移s位*/
/* 完成下列16个操作*/
[ABCD 0 7 1 ] [DABC 1 12 2 ] [CDAB 2 17 3 ] [BCDA 3 22 4 ]
[ABCD 4 7 5 ] [DABC 5 12 6 ] [CDAB 6 17 7 ] [BCDA 7 22 8 ]
[ABCD 8 7 9 ] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* 第二轮*/
/*令[abcd k s i]表示操作
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s)*/
/*完成下列16个操作*/
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/*第三轮*/
/*令[abcd k s t]表示操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s)*/
/*完成以下16个操作*/
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/*第四轮*/
/*令[abcd k s t]表示操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) */
/*完成以下16个操作*/
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /*i循环*/
5) 输出
由A、B、C、D四个寄存器的输出按低位字节在前的顺序(即以A的低字节开始、D的高字节结束)得到128位的消息摘要。
以上就是对MD5算法的描述。MD5算法的运算均为基本运算,比较容易实现且速度很快。
安全散列函数(SHA)
算法
SHA是美国NIST和NSA共同设计的安全散列算法(Secure Hash Algorithm),用于数字签名标准DSS(Digital Signature Standard)。SHA的修改版SHA–1于1995年作为美国联邦信息处理标准公告(FIPS PUB 180–1)发布[2]。
④ 如何位运算实现数的逆转
#include <stdio.h>
int main()
{
char c = 0x95; //10010101
int i;
char res = 0;
int roundTime = sizeof(c)*8-1;
for(i = roundTime; i >= 0; i--){
if(c & (1<<i)){
res |= 1<<roundTime-i;
}
}
for(i = roundTime; i >= 0; i--){
if(res & (1<<i)){
printf("1");
}else{
printf("0");
}
}
return 0;
}
另外楼主可以将此段代码封装成函数 用C++ 可以写成模板...
⑤ md5 是什么文件用什么文件打开
就是一种加密算发,用文本查看文件一般就可以打开。
md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来,经md2、md3和md4发展而来。
它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。
(5)md6算法扩展阅读:
应用
用于密码管理
当我们需要保存某些密码信息以用于身份确认时,如果直接将密码信息以明码方式保存在数据库中,不使用任何保密措施,系统管理员就很容易能得到原来的密码信息,这些信息一旦泄露, 密码也很容易被破译。
电子签名
MD5 算法还可以作为一种电子签名的方法来使用,使用 MD5算法就可以为任何文件(不管其大小、格式、数量)产生一个独一无二的“数字指纹”,借助这个“数字指纹”,通过检查文件前后 MD5 值是否发生了改变,就可以知道源文件是否被改动。
⑥
鍙鑳芥槸绫讳技浜巑d5镄勫姞瀵嗙畻娉
---------------
md5镄勫叏绉版槸message-digest algorithm 5锛堜俊鎭-鎽樿佺畻娉曪级锛屽湪90骞翠唬鍒濈敱mit laboratory for computer science鍜宺sa data security inc镄剅onald l. rivest寮鍙戝嚭𨱒ワ纴缁弇d2銆乵d3鍜宫d4鍙戝𪾢钥屾潵銆傚畠镄勪綔鐢ㄦ槸璁╁ぇ瀹归噺淇℃伅鍦ㄧ敤鏁板瓧绛惧悕杞浠剁剧讲绉佷汉瀵嗗宠鍓嶈"铡嬬缉"鎴愪竴绉崭缭瀵嗙殑镙煎纺锛埚氨鏄鎶娄竴涓浠绘剰闀垮害镄勫瓧鑺备覆鍙樻崲鎴愪竴瀹氶暱镄勫ぇ鏁存暟锛夈备笉绠℃槸md2銆乵d4杩樻槸md5锛屽畠浠閮介渶瑕佽幏寰椾竴涓闅忔満闀垮害镄勪俊鎭骞朵骇鐢熶竴涓128浣岖殑淇℃伅鎽樿併傝槠铹惰繖浜涚畻娉旷殑缁撴瀯鎴栧氭垨灏戞湁浜涚浉浼硷纴浣唌d2镄勮捐′笌md4鍜宫d5瀹屽叏涓嶅悓锛岄偅鏄锲犱负md2鏄涓8浣嶆満鍣ㄥ仛杩囱捐′紭鍖栫殑锛岃宫d4鍜宫d5鍗存槸闱㈠悜32浣岖殑鐢佃剳銆傝繖涓変釜绠楁硶镄勬弿杩板拰c璇瑷婧愪唬镰佸湪internet rfcs 1321涓链夎︾粏镄勬弿杩帮纸h++p://www.ietf.org/rfc/rfc1321.txt锛夛纴杩欐槸涓浠芥渶𨱒冨▉镄勬枃妗o纴鐢眗onald l. rivest鍦1992骞8链埚悜ieft鎻愪氦銆
rivest鍦1989骞村紑鍙戝嚭md2绠楁硶銆傚湪杩欎釜绠楁硶涓锛岄栧厛瀵逛俊鎭杩涜屾暟鎹琛ヤ綅锛屼娇淇℃伅镄勫瓧鏁e巻鑺傞暱搴︽槸16镄勫嶆暟銆傜劧钖庯纴浠ヤ竴涓16浣岖殑妫楠屽拰杩藉姞鍒颁俊鎭链灏俱傚苟涓旀牴鎹杩欎釜鏂颁骇鐢熺殑淇℃伅璁$畻鍑烘暎鍒楀笺傚悗𨱒ワ纴rogier鍜宑hauvaud鍙戠幇濡傛灉蹇界暐浜嗘楠屽拰灏嗕骇鐢焟d2鍐茬獊銆俶d2绠楁硶镄勫姞瀵嗗悗缁撴灉鏄鍞涓镄--镞㈡病链夐吨澶嶅啿鎱ф悳銆
涓轰简锷犲己绠楁硶镄勫畨鍏ㄦэ纴rivest鍦1990骞村张寮鍙戝嚭md4绠楁硶銆俶d4绠楁硶钖屾牱闇瑕佸~琛ヤ俊鎭浠ョ‘淇濅俊鎭镄勫瓧鑺傞暱搴﹀姞涓448钖庤兘琚512鏁撮櫎锛堜俊鎭瀛楄妭闀垮害mod 512 = 448锛夈傜劧钖庯纴涓涓浠64浣崭簩杩涘埗琛ㄧず镄勪俊鎭镄勬渶鍒濋暱搴﹁娣诲姞杩涙潵銆备俊鎭琚澶勭悊鎴512浣峝amg?rd/merkle杩浠g粨鏋勭殑鍖哄潡锛岃屼笖姣忎釜鍖哄潡瑕侀氲繃涓変釜涓嶅悓姝ラょ殑澶勭悊銆俤en boer鍜宐osselaers浠ュ强鍏朵粬浜哄緢蹇镄勫彂鐜颁简鏀诲嚮md4鐗堟湰涓绗涓姝ュ拰绗涓夋ョ殑婕忔礊銆俤obbertin钖戝ぇ瀹舵紨绀轰简濡备綍鍒╃敤涓閮ㄦ櫘阃氱殑涓浜虹数鑴戝湪鍑犲垎阍熷唴镓惧埌md4瀹屾暣鐗堟湰涓镄勫啿绐侊纸杩欎釜鍐茬獊瀹为檯涓婃槸涓绉嶆纺娲烇纴瀹冨皢瀵艰嚧瀵逛笉钖岀殑鍐呭硅繘琛屽姞瀵嗗嵈鍙鑳藉缑鍒扮浉钖岀殑锷犲瘑钖庣粨鏋滐级銆傛镞犵枒闂锛宫d4灏辨よ娣樻卑鎺変简銆
灏界md4绠楁硶鍦ㄥ畨鍏ㄤ笂链変釜杩欎箞澶х殑婕忔礊锛屼絾瀹冨瑰湪鍏跺悗镓嶈寮鍙戝嚭𨱒ョ殑濂藉嚑绉崭俊鎭瀹夊叏锷犲瘑绠楁硶镄勫嚭鐜板嵈链夌潃涓嶅彲蹇借嗙殑寮曞间綔鐢ㄣ傞櫎浜唌d5浠ュ栵纴鍏朵腑姣旇缉链夊悕镄勮缮链塻ha-1銆乺ipe-md浠ュ强haval绛夈
涓骞翠互钖庯纴鍗1991骞达纴rivest寮鍙戝嚭鎶链涓婃洿涓鸿秼杩戞垚镡熺殑md5绠楁硶銆傚畠鍦╩d4镄勫熀纭涓婂炲姞浜"瀹夊叏-甯﹀瓙"锛坰afety-belts锛夌殑姒傚康銆傝槠铹秏d5姣攎d4绋嶅井鎱涓浜涳纴浣嗗嵈镟翠负瀹夊叏銆傝繖涓绠楁硶寰堟槑鏄剧殑鐢卞洓涓鍜宫d4璁捐℃湁灏戣镐笉钖岀殑姝ラょ粍鎴愩傚湪md5绠楁硶涓锛屼俊鎭-鎽樿佺殑澶у皬鍜屽~鍏呯殑蹇呰佹浔浠朵笌md4瀹屽叏鐩稿悓銆俤en boer鍜宐osselaers镟惧彂鐜癿d5绠楁硶涓镄勫亣鍐茬獊锛坧seudo-collisions锛夛纴浣嗛櫎姝や箣澶栧氨娌$ⅶ阃楁湁鍏朵粬琚鍙戠幇镄勫姞瀵嗗悗缁撴灉浜嗐
van oorschot鍜寃iener镟剧粡钥冭槛杩囦竴涓鍦ㄦ暎鍒椾腑𨱌村姏鎼滃诲啿绐佺殑鍑芥暟锛坆rute-force hash function锛夛纴钥屼笖浠栦滑鐚沧祴涓涓琚璁捐′笓闂ㄧ敤𨱒ユ悳绱md5鍐茬獊镄勬満鍣锛堣繖鍙版満鍣ㄥ湪1994骞寸殑鍒堕犳垚链澶х害鏄涓锏句竾缇庡厓锛夊彲浠ュ钩鍧囨疮24澶╁氨镓惧埌涓涓鍐茬獊銆备絾鍗曚粠1991骞村埌2001骞磋繖10骞撮棿锛岀珶娌℃湁鍑虹幇镟夸唬md5绠楁硶镄刴d6鎴栬鍙锅氩叾浠栦粈涔埚悕瀛楃殑鏂扮畻娉曡繖涓镣癸纴鎴戜滑灏卞彲浠ョ湅鍑鸿繖涓鐟旷柕骞舵病链夊お澶氱殑褰卞搷md5镄勫畨鍏ㄦс备笂闱㈡墍链夎繖浜涢兘涓嶈冻浠ユ垚涓簃d5镄勫湪瀹为檯搴旂敤涓镄勯梾棰樸傚苟涓旓纴鐢变簬md5绠楁硶镄勪娇鐢ㄤ笉闇瑕佹敮浠树换浣旷増𨱒冭垂鐢ㄧ殑锛屾墍浠ュ湪涓鑸镄勬儏鍐典笅锛堥潪缁濆瘑搴旂敤棰嗗烟銆备絾鍗充究鏄搴旂敤鍦ㄧ粷瀵嗛嗗烟鍐咃纴md5涔熶笉澶变负涓绉嶉潪甯镐紭绉镄勪腑闂存妧链锛夛纴md5镐庝箞閮藉簲璇ョ畻寰椾笂鏄闱炲父瀹夊叏镄勪简銆
绠楁硶镄勫簲鐢
md5镄勫吀鍨嫔簲鐢ㄦ槸瀵逛竴娈典俊鎭锛坢essage锛変骇鐢熶俊鎭鎽樿侊纸message-digest锛夛纴浠ラ槻姝㈣绡℃敼銆傛瘆濡傦纴鍦╱nix涓嬫湁寰埚氲蒋浠跺湪涓嬭浇镄勬椂鍊欓兘链変竴涓鏂囦欢钖岖浉钖岋纴鏂囦欢镓╁𪾢钖崭负.md5镄勬枃浠讹纴鍦ㄨ繖涓鏂囦欢涓阃氩父鍙链変竴琛屾枃链锛屽ぇ镊寸粨鏋勫傦细
md5 (tanajiya.tar.gz) =
杩椤氨鏄痶anajiya.tar.gz鏂囦欢镄勬暟瀛楃惧悕銆俶d5灏嗘暣涓鏂囦欢褰扑綔涓涓澶ф枃链淇℃伅锛岄氲繃鍏朵笉鍙阃嗙殑瀛楃︿覆鍙樻崲绠楁硶锛屼骇鐢熶简杩欎釜鍞涓镄刴d5淇℃伅鎽樿併傚傛灉鍦ㄤ互钖庝紶鎾杩欎釜鏂囦欢镄勮繃绋嬩腑锛屾棤璁烘枃浠剁殑鍐呭瑰彂鐢熶简浠讳綍褰㈠纺镄勬敼鍙桡纸鍖呮嫭浜轰负淇鏀规垨钥呬笅杞借繃绋嬩腑绾胯矾涓岖ǔ瀹氩紩璧风殑浼犺緭阌栾绛夛级锛屽彧瑕佷綘瀵硅繖涓鏂囦欢閲嶆柊璁$畻md5镞跺氨浼氩彂鐜颁俊鎭鎽樿佷笉鐩稿悓锛岀敱姝ゅ彲浠ョ‘瀹氢綘寰楀埌镄勫彧鏄涓涓涓嶆g‘镄勬枃浠躲傚傛灉鍐嶆湁涓涓绗涓夋柟镄勮よ瘉链烘瀯锛岀敤md5杩桦彲浠ラ槻姝㈡枃浠朵綔钥呯殑"鎶佃禆"锛岃繖灏辨槸镓璋撶殑鏁板瓧绛惧悕搴旂敤銆
md5杩桦箍娉涚敤浜庡姞瀵嗗拰瑙e瘑鎶链涓娿傛瘆濡傚湪unix绯荤粺涓鐢ㄦ埛镄勫瘑镰佸氨鏄浠md5锛堟垨鍏跺畠绫讳技镄勭畻娉曪级缁忓姞瀵嗗悗瀛桦偍鍦ㄦ枃浠剁郴缁熶腑銆傚綋鐢ㄦ埛锏诲綍镄勬椂鍊欙纴绯荤粺鎶婄敤鎴疯緭鍏ョ殑瀵嗙爜璁$畻鎴恗d5鍊硷纴铹跺悗鍐嶅幓鍜屼缭瀛桦湪鏂囦欢绯荤粺涓镄刴d5鍊艰繘琛屾瘆杈冿纴杩涜岀‘瀹氲緭鍏ョ殑瀵嗙爜鏄钖︽g‘銆傞氲繃杩欐牱镄勬ラわ纴绯荤粺鍦ㄥ苟涓岖煡阆撶敤鎴峰瘑镰佺殑鏄庣爜镄勬儏鍐典笅灏卞彲浠ョ‘瀹氱敤鎴风橱褰旷郴缁熺殑钖堟硶镐с傝繖涓崭絾鍙浠ラ伩鍏岖敤鎴风殑瀵嗙爜琚鍏锋湁绯荤粺绠$悊锻樻潈闄愮殑鐢ㄦ埛鐭ラ亾锛岃屼笖杩桦湪涓瀹氱▼搴︿笂澧炲姞浜嗗瘑镰佽镰磋В镄勯毦搴︺
姝f槸锲犱负杩欎釜铡熷洜锛岀幇鍦ㄨ榛戝浣跨敤链澶氱殑涓绉岖牬璇戝瘑镰佺殑鏂规硶灏辨槸涓绉嶈绉颁负"璺戝瓧鍏"镄勬柟娉曘傛湁涓ょ嶆柟娉曞缑鍒板瓧鍏革纴涓绉嶆槸镞ュ父鎼滈泦镄勭敤锅氩瘑镰佺殑瀛楃︿覆琛锛屽彟涓绉嶆槸鐢ㄦ帓鍒楃粍钖堟柟娉旷敓鎴愮殑锛屽厛鐢╩d5绋嫔簭璁$畻鍑鸿繖浜涘瓧鍏搁”镄刴d5鍊硷纴铹跺悗鍐岖敤鐩镙囩殑md5鍊煎湪杩欎釜瀛楀吀涓妫绱銆傛垜浠锅囱惧瘑镰佺殑链澶ч暱搴︿负8浣嶅瓧鑺傦纸8 bytes锛夛纴钖屾椂瀵嗙爜鍙鑳芥槸瀛楁瘝鍜屾暟瀛楋纴鍏26+26+10=62涓瀛楃︼纴鎺掑垪缁勫悎鍑虹殑瀛楀吀镄勯”鏁板垯鏄痯(62,1)+p(62,2)钬.+p(62,8)锛岄偅涔熷凡缁忔槸涓涓寰埚ぉ鏂囩殑鏁板瓧浜嗭纴瀛桦偍杩欎釜瀛楀吀灏遍渶瑕乼b绾х殑纾佺洏阒靛垪锛岃屼笖杩欑嶆柟娉曡缮链変竴涓鍓嶆彁锛屽氨鏄鑳借幏寰楃洰镙囱处鎴风殑瀵嗙爜md5鍊肩殑𨱍呭喌涓嬫墠鍙浠ャ傝繖绉嶅姞瀵嗘妧链琚骞挎硾镄勫簲鐢ㄤ簬unix绯荤粺涓锛岃繖涔熸槸涓轰粈涔坲nix绯荤粺姣斾竴鑸镎崭綔绯荤粺镟翠负鍧氩浐涓涓閲嶈佸师锲犮
绠楁硶鎻忚堪
瀵筸d5绠楁硶绠瑕佺殑鍙栾堪鍙浠ヤ负锛歮d5浠512浣嶅垎缁勬潵澶勭悊杈揿叆镄勪俊鎭锛屼笖姣忎竴鍒嗙粍鍙堣鍒掑垎涓16涓32浣嶅瓙鍒嗙粍锛岀粡杩囦简涓绯诲垪镄勫勭悊钖庯纴绠楁硶镄勮緭鍑虹敱锲涗釜32浣嶅垎缁勭粍鎴愶纴灏呜繖锲涗釜32浣嶅垎缁勭骇镵斿悗灏嗙敓鎴愪竴涓128浣嶆暎鍒楀笺
鍦╩d5绠楁硶涓锛岄栧厛闇瑕佸逛俊鎭杩涜屽~鍏咃纴浣垮叾瀛楄妭闀垮害瀵512姹备綑镄勭粨鏋灭瓑浜448銆傚洜姝わ纴淇℃伅镄勫瓧鑺傞暱搴︼纸bits length锛夊皢琚镓╁𪾢镊硁*512+448锛屽嵆n*64+56涓瀛楄妭锛坆ytes锛夛纴n涓轰竴涓姝f暣鏁般傚~鍏呯殑鏂规硶濡备笅锛屽湪淇℃伅镄勫悗闱㈠~鍏呬竴涓1鍜屾棤鏁颁釜0锛岀洿鍒版弧瓒充笂闱㈢殑𨱒′欢镞舵墠锅沧㈢敤0瀵逛俊鎭镄勫~鍏呫傜劧钖庯纴鍦ㄥ湪杩欎釜缁撴灉钖庨溃闄勫姞涓涓浠64浣崭簩杩涘埗琛ㄧず镄勫~鍏呭墠淇℃伅闀垮害銆傜粡杩囱繖涓ゆョ殑澶勭悊锛岀幇鍦ㄧ殑淇℃伅瀛楄妭闀垮害=n*512+448+64=(n+1)*512锛屽嵆闀垮害鎭板ソ鏄512镄勬暣鏁板嶃傝繖镙峰仛镄勫师锲犳槸涓烘弧瓒冲悗闱㈠勭悊涓瀵逛俊鎭闀垮害镄勮佹眰銆
md5涓链夊洓涓32浣嶈绉颁綔阈炬帴鍙橀噺锛坈haining variable锛夌殑鏁存暟鍙傛暟锛屼粬浠鍒嗗埆涓猴细a=0x01234567锛宐=0x89abcdef锛宑=0xfedcba98锛宒=0x76543210銆
褰撹剧疆濂借繖锲涗釜阈炬帴鍙橀噺钖庯纴灏卞紑濮嬭繘鍏ョ畻娉旷殑锲涜疆寰鐜杩愮畻銆傚惊鐜镄勬℃暟鏄淇℃伅涓512浣崭俊鎭鍒嗙粍镄勬暟鐩銆
灏嗕笂闱㈠洓涓阈炬帴鍙橀噺澶嶅埗鍒板彟澶栧洓涓鍙橀噺涓锛歛鍒瘾锛宐鍒痈锛宑鍒瘫锛宒鍒癫銆
涓诲惊鐜链夊洓杞锛坢d4鍙链変笁杞锛夛纴姣忚疆寰鐜閮藉緢鐩镐技銆傜涓杞杩涜16娆℃搷浣溿傛疮娆℃搷浣滃笕銆乥銆乧鍜宒涓镄勫叾涓涓変釜浣滀竴娆¢潪绾挎у嚱鏁拌繍绠楋纴铹跺悗灏嗘墍寰楃粨鏋滃姞涓婄锲涗釜鍙橀噺锛屾枃链镄勪竴涓瀛愬垎缁勫拰涓涓甯告暟銆傚啀灏嗘墍寰楃粨鏋滃悜鍙崇幆绉讳竴涓涓嶅畾镄勬暟锛屽苟锷犱笂a銆乥銆乧鎴杁涓涔嬩竴銆傛渶钖庣敤璇ョ粨鏋滃彇浠a銆乥銆乧鎴杁涓涔嬩竴銆
浠ヤ竴涓嬫槸姣忔℃搷浣滀腑鐢ㄥ埌镄勫洓涓闱炵嚎镐у嚱鏁帮纸姣忚疆涓涓锛夈
f(x,y,z) =(x&y)|((~x)&z)
g(x,y,z) =(x&z)|(y&(~z))
h(x,y,z) =x^y^z
i(x,y,z)=y^(x|(~z))
锛&鏄涓庯纴|鏄鎴栵纴~鏄闱烇纴^鏄寮傛垨锛
杩椤洓涓鍑芥暟镄勮存槑锛氩傛灉x銆乱鍜寊镄勫瑰簲浣嶆槸镫绔嫔拰鍧囧寑镄勶纴闾d箞缁撴灉镄勬疮涓浣崭篃搴旀槸镫绔嫔拰鍧囧寑镄勚
f鏄涓涓阃愪綅杩愮畻镄勫嚱鏁般傚嵆锛屽傛灉x锛岄偅涔坹锛屽惁鍒检銆傚嚱鏁癶鏄阃愪綅濂囧伓镎崭綔绗︺
锅囱緈j琛ㄧず娑堟伅镄勭琷涓瀛愬垎缁勶纸浠0鍒15锛夛纴<<
ff(a,b,c,d,mj,s,ti)琛ㄧずa=b+((a+(f(b,c,d)+mj+ti)<< gg(a,b,c,d,mj,s,ti)琛ㄧずa=b+((a+(g(b,c,d)+mj+ti)<< hh(a,b,c,d,mj,s,ti)琛ㄧずa=b+((a+(h(b,c,d)+mj+ti)<< ii(a,b,c,d,mj,s,ti)琛ㄧずa=b+((a+(i(b,c,d)+mj+ti)<<
杩椤洓杞锛64姝ワ级鏄锛
绗涓杞
ff(a,b,c,d,m0,7,0xd76aa478)
ff(d,a,b,c,m1,12,0xe8c7b756)
ff(c,d,a,b,m2,17,0x242070db)
ff(b,c,d,a,m3,22,0xc1bdceee)
ff(a,b,c,d,m4,7,0xf57c0faf)
ff(d,a,b,c,m5,12,0x4787c62a)
ff(c,d,a,b,m6,17,0xa8304613)
ff(b,c,d,a,m7,22,0xfd469501)
ff(a,b,c,d,m8,7,0x698098d8)
ff(d,a,b,c,m9,12,0x8b44f7af)
ff(c,d,a,b,m10,17,0xffff5bb1)
ff(b,c,d,a,m11,22,0x895cd7be)
ff(a,b,c,d,m12,7,0x6b901122)
ff(d,a,b,c,m13,12,0xfd987193)
ff(c,d,a,b,m14,17,0xa679438e)
ff(b,c,d,a,m15,22,0x49b40821)
绗浜岃疆
gg(a,b,c,d,m1,5,0xf61e2562)
gg(d,a,b,c,m6,9,0xc040b340)
gg(c,d,a,b,m11,14,0x265e5a51)
gg(b,c,d,a,m0,20,0xe9b6c7aa)
gg(a,b,c,d,m5,5,0xd62f105d)
gg(d,a,b,c,m10,9,0x02441453)
gg(c,d,a,b,m15,14,0xd8a1e681)
gg(b,c,d,a,m4,20,0xe7d3fbc8)
gg(a,b,c,d,m9,5,0x21e1cde6)
gg(d,a,b,c,m14,9,0xc33707d6)
gg(c,d,a,b,m3,14,0xf4d50d87)
gg(b,c,d,a,m8,20,0x455a14ed)
gg(a,b,c,d,m13,5,0xa9e3e905)
gg(d,a,b,c,m2,9,0xfcefa3f8)
gg(c,d,a,b,m7,14,0x676f02d9)
gg(b,c,d,a,m12,20,0x8d2a4c8a)
绗涓夎疆
hh(a,b,c,d,m5,4,0xfffa3942)
hh(d,a,b,c,m8,11,0x8771f681)
hh(c,d,a,b,m11,16,0x6d9d6122)
hh(b,c,d,a,m14,23,0xfde5380c)
hh(a,b,c,d,m1,4,0xa4beea44)
hh(d,a,b,c,m4,11,0x4bdecfa9)
hh(c,d,a,b,m7,16,0xf6bb4b60)
hh(b,c,d,a,m10,23,0xbebfbc70)
hh(a,b,c,d,m13,4,0x289b7ec6)
hh(d,a,b,c,m0,11,0xeaa127fa)
hh(c,d,a,b,m3,16,0xd4ef3085)
hh(b,c,d,a,m6,23,0x04881d05)
hh(a,b,c,d,m9,4,0xd9d4d039)
hh(d,a,b,c,m12,11,0xe6db99e5)
hh(c,d,a,b,m15,16,0x1fa27cf8)
hh(b,c,d,a,m2,23,0xc4ac5665)
绗锲涜疆
ii(a,b,c,d,m0,6,0xf4292244)
ii(d,a,b,c,m7,10,0x432aff97)
ii(c,d,a,b,m14,15,0xab9423a7)
ii(b,c,d,a,m5,21,0xfc93a039)
ii(a,b,c,d,m12,6,0x655b59c3)
ii(d,a,b,c,m3,10,0x8f0ccc92)
ii(c,d,a,b,m10,15,0xffeff47d)
ii(b,c,d,a,m1,21,0x85845dd1)
ii(a,b,c,d,m8,6,0x6fa87e4f)
ii(d,a,b,c,m15,10,0xfe2ce6e0)
ii(c,d,a,b,m6,15,0xa3014314)
ii(b,c,d,a,m13,21,0x4e0811a1)
ii(a,b,c,d,m4,6,0xf7537e82)
ii(d,a,b,c,m11,10,0xbd3af235)
ii(c,d,a,b,m2,15,0x2ad7d2bb)
ii(b,c,d,a,m9,21,0xeb86d391)
甯告暟ti鍙浠ュ备笅阃夋嫨锛
鍦ㄧ琲姝ヤ腑锛宼i鏄4294967296*abs(sin(i))镄勬暣鏁伴儴鍒嗭纴i镄勫崟浣嶆槸寮у害銆(4294967296绛変簬2镄32娆℃柟)
镓链夎繖浜涘畬鎴愪箣钖庯纴灏哸銆乥銆乧銆乨鍒嗗埆锷犱笂a銆乥銆乧銆乨銆傜劧钖庣敤涓嬩竴鍒嗙粍鏁版嵁缁х画杩愯岀畻娉曪纴链钖庣殑杈揿嚭鏄痑銆乥銆乧鍜宒镄勭骇镵斻
褰扑綘鎸夌収鎴戜笂闱㈡墍璇寸殑鏂规硶瀹炵幇md5绠楁硶浠ュ悗锛屼綘鍙浠ョ敤浠ヤ笅鍑犱釜淇℃伅瀵逛綘锅氩嚭𨱒ョ殑绋嫔簭浣滀竴涓绠鍗旷殑娴嬭瘯锛岀湅鐪嬬▼搴忔湁娌℃湁阌栾銆
md5 ("") =
md5 ("a") =
md5 ("abc") =
md5 ("message digest") =
md5 ("abcdefghijklmnopqrstuvwxyz") =
md5 ("") =
md5 ("
01234567890") =
濡傛灉浣犵敤涓婇溃镄勪俊鎭鍒嗗埆瀵逛綘锅氱殑md5绠楁硶瀹炰緥锅氭祴璇曪纴链钖庡缑鍑虹殑缁撹哄拰镙囧嗳绛旀埚畬鍏ㄤ竴镙凤纴闾f垜灏辫佸湪杩欓噷璞′綘阆扑竴澹扮濊春浜嗐傝佺煡阆掳纴鎴戠殑绋嫔簭鍦ㄧ涓娆$紪璇戞垚锷熺殑镞跺欐槸娌℃湁寰楀嚭鍜屼笂闱㈢浉钖岀殑缁撴灉镄勚
md5镄勫畨鍏ㄦ
md5鐩稿筸d4镓浣灭殑鏀硅繘锛
1. 澧炲姞浜嗙锲涜疆锛
2. 姣忎竴姝ュ潎链夊敮涓镄勫姞娉曞父鏁帮绂
3. 涓哄噺寮辩浜岃疆涓鍑芥暟g镄勫圭О镐т粠(x&y)|(x&z)|(y&z)鍙树负(x&z)|(y&(~z))锛
4. 绗涓姝ュ姞涓娄简涓娄竴姝ョ殑缁撴灉锛岃繖灏嗗紩璧锋洿蹇镄勯洩宕╂晥搴旓绂
5. 鏀瑰彉浜嗙浜岃疆鍜岀涓夎疆涓璁块梾娑堟伅瀛愬垎缁勭殑娆″簭锛屼娇鍏舵洿涓岖浉浼硷绂
6. 杩戜技浼桦寲浜嗘疮涓杞涓镄勫惊鐜宸︾Щ浣岖Щ閲忎互瀹炵幇镟村揩镄勯洩宕╂晥搴斻傚悇杞镄勪綅绉婚噺浜掍笉鐩稿悓銆
[color=red]绠鍗旷殑璇达细
MD5鍙淇℃伅锛嶆憳瑕佺畻娉曪纴鏄涓绉嶅瘑镰佺殑绠楁硶锛屽畠鍙浠ュ逛换浣曟枃浠朵骇鐢熶竴涓鍞涓镄凪D5楠岃瘉镰侊纴姣忎釜鏂囦欢镄凪D5镰佸氨濡傚悓姣忎釜浜虹殑鎸囩汗涓镙凤纴閮芥槸涓嶅悓镄勶纴杩欐牱锛屼竴镞﹁繖涓鏂囦欢鍦ㄤ紶杈撹繃绋嬩腑锛屽叾鍐呭硅鎹熷潖鎴栬呰淇鏀圭殑璇濓纴闾d箞杩欎釜鏂囦欢镄凪D5镰佸氨浼氩彂鐢熷彉鍖栵纴阃氲繃瀵规枃浠祃D5镄勯獙璇侊纴鍙浠ュ缑鐭ヨ幏寰楃殑鏂囦欢鏄钖﹀畬鏁淬