Java利用MessageDigest获取字符串或文件 MD5.doc

Java利用MessageDigest获取字符串或文件 MD5.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java利用MessageDigest获取字符串或文件 MD5.doc

Java利用MessageDigest获取字符串或文件 MD5   MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性。用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm)。另外还有一种常用的消息摘要算法SHA1。如果想了解这些的话,可以去百度百科:MD5、SHA1、消息摘要算法。   Java已经实现了MD5、SHA1算法。利用java.security.MessageDigest类就可以获取字符串和文件的MD5以及SHA1结果。   1.字符串的MD5(下面的代码有详细注释) [java]?view plaincopy public?static?String?stringMD5(String?input)?{?? ?? ???try?{?? ?? ??????//?拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)?? ?? ??????MessageDigest?messageDigest?=MessageDigest.getInstance(MD5);?? ?? ?? ??????//?输入的字符串转换成字节数组?? ?? ??????byte[]?inputByteArray?=?input.getBytes();?? ?? ?? ?? ??????//?inputByteArray是输入字符串转换得到的字节数组?? ?? ??????messageDigest.update(inputByteArray);?? ?? ?? ?? ??????//?转换并返回结果,也是字节数组,包含16个元素?? ?? ??????byte[]?resultByteArray?=?messageDigest.digest();?? ?? ?? ?? ??????//?字符数组转换成字符串返回?? ?? ??????return?byteArrayToHex(resultByteArray);?? ?? ??????? ?? ???}?catch?(NoSuchAlgorithmException?e)?{?? ?? ??????return?null;?? ?? ???}?? ?? }?? ?? ?? //下面这个函数用于将字节数组换成成16进制的字符串 [java]?view plaincopy public?static?String?byteArrayToHex(byte[]?byteArray)?{?? ?? ???//?首先初始化一个字符数组,用来存放每个16进制字符?? ?? ???char[]?hexDigits?=?{0,1,2,3,4,5,6,7,8,9,?A,B,C,D,E,F?};?? ?? ?? ?? ???//?new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))?? ?? ???char[]?resultCharArray?=new?char[byteArray.length?*?2];?? ?? ?? ?? ???//?遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去?? ?? ???int?index?=?0;?? ?? ???for?(byte?b?:?byteArray)?{?? ?? ??????resultCharArray[index++]?=?hexDigits[b?4??0xf];?? ?? ??????resultCharArray[index++]?=?hexDigits[b?0xf];?? ?? ???}?? ?? ?? ?? ???//?字符数组组合成字符串返回?? ?? ???return?new?String(resultCharArray);?? ? ? 从上面代码可以看出,使用MessageDigest对字符串进行MD5算法的步骤是,先将字符串转换成字节数组,在进行MD5算法,最后返回的也是一个字节数组,要我们自己转成32位的字符串。 ? 2.文件MD5 ? 对文件进行MD5也可以像字符串MD5一样的,首先要把文件转成字节数组,后面和字符串MD5完全一样。 但是如果是一个特别大的文件,一下子把一个文件的数组全部读到内存中,那么估计内存也吃不消。 对于大文件,可以使用DigestInputStream。 ? [java]?view plaincopy public?static?String?fileMD5(String?inputFile)?throws?IOException?{?? ?? ??? ?? ??????//?缓冲区大小(这个可以抽出一个参数)?? ?? ??????int?bufferSiz

文档评论(0)

wsh1288 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档