什么是MD5?MD5是一种算法。MD5中的MD代表MessageDigest,即信息摘要。至于数字5,是因为它是对早期MD4算法的改进而得名的。MD5。所以MD5是信息摘要算法的第五版。什么是信息摘要算法,什么是信息摘要算法?它本质上是一个散列函数(hashfunction)。它也被称为散列函数。那么什么是哈希函数呢?它指的是可以将任意大小的数据映射成固定大小的值的函数。哈希函数是可用于将任意大小的数据映射到固定大小值的任何函数。哈希函数返回的值称为散列值(hashvalue),也称为散列码(hashcodes),或直接简称为散列(hash)。比较抽象,这里举一个具体的例子来说明。以Java为例,可以这样计算MD5:=md.digest(bytes);}注:由于摘要计算的输入是字节数组,如果要计算字符串的摘要值,需要将其转换成某种编码的字节数组,为了一致性,您应该始终明确使用相同的编码,例如utf-8。从上面的代码不难看出,一个MD5函数的输入和输出都是字节数组byte[],不能直接在代码中体现重点是:输入可以是任意大小的字节数组,并且输出是一个固定大小的字节数组。对于MD5算法来说,输出值是一个固定大小的16字节的数组,又因为每个字一个字节有8位,所以最终的输出值是一个16×8=128位的二进制数。MD5的值是一个128位的二进制整数。比如下面是一个具体的MD5的值,以原始的128位二进制形式表示:10001000100100011001000111110000100011111000000111010010110010101100010111101010000110011011110000111011111101111101100110111110这个MD5值实际是对我的网站域名xiaogd.net作摘要的结果.这个值的二进制形式实在是长得不要不要的,所以一般会转换为Inhexadecimalform,thereare16groupsintotal:889191f08f81d2cac5ea19bc3bf7d9be.Itisstillverylong,butitismuchbetterthanbinary.Bytheway,IPv6addressesarealso128bitsYes,soitisalsoabnormallylong,anditisstillverylongwhenwritteninhexadecimal,andIcan’trememberatall...Finally,spacesareusuallyremovedandwrittenasacompact32-characterstring:889191f08f81d2cac5ea19bc3bf7d9be,thatisItisthemostcommonformofMD5valuewesee.Butpleasedon'tmisunderstand,thevalueofMD5isnotastring,letaloneanylettercanappearinit.ThetermandconformityinthisarticleA"word"is32bits,a"Byte"is8bits.Wedefinex_itorepresent"xminusI".Ifthesubtrahendisanexpression,itisenclosedinparentheses,suchas:x_{i+1}.Similarly,weuse^torepresentexponentiation,sox^irepresentstheipowerofx."+"representstheadditionbetween"words",X<<
