- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 水果知识培训榴莲.pptx VIP
- 《无人机概论》高职无人机应用技术专业全套教学课件.pptx
- 公安局辅警招聘考试试题库《综合理论知识》(含政治理论、法律法规、公安工作基本知识).pdf VIP
- EN10346:2015_连续热浸镀钢带产品交货技术条件中文版.pdf VIP
- 山东初级注册安全工程师考试题库.pdf VIP
- 卫星遥测数据处理方法、系统及星座状态监控平台.pdf VIP
- 东风螺粉状配合饲料 .pdf VIP
- 高一下学期化学人教版必修第二册用化学沉淀法去除粗盐中的杂质离子课件.pptx VIP
- 2022版三甲评审资料 医院安全保卫管理制度.pdf VIP
- 全过程工程咨询服务 方案(技术方案).doc
文档评论(0)