ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:22.50KB ,
资源ID:10478634      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10478634.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java 加密解密之消息摘要算法MD5 SHA MAC.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java 加密解密之消息摘要算法MD5 SHA MAC.docx

1、Java 加密解密之消息摘要算法MD5 SHA MACJava 加密解密之消息摘要算法(MD5 SHA MAC)本文转自网络消息摘要消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。消息摘要采用单向Hash 函数将需加密的明文摘要成一串128bit的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长度,且不同的明

2、文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。这样这串摘要便可成为验证明文是否是真身的指纹了。HASH函数的抗冲突性使得如果一段明文稍有变化,哪怕只更改该段落的一个字母,通过哈希算法作用后都将产生不同的值。而HASH算法的单向性使得要找到到哈希值相同的两个不同的输入消息,在计算上是不可能的。所以数据的哈希值,即消息摘要,可以检验数据的完整性。哈希函数的这种对不同的输入能够生成不同的值的特性使得无法找到两个具有相同哈希值的输入。因此,如果两个文档经哈希转换后成为相同的值,就可以肯定它们是同一文档。所以,当希望有效地比较两个数据块时,就可以比较它们的哈希值。例如,可以通过比较邮件发送

3、前和发送后的哈希值来验证该邮件在传递时是否修改。消息摘要算法消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络相同上使用。由于其加密计算的工作量相当可观,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的。近年来,随着计算机相同性能的飞速改善,加密速度不再成为限制这种加密技术发展的桎梏,因而消息摘要算法应用的领域不断增加。消息摘要算法的特点:无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。消息摘要

4、看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。好的摘要算法,无法找到两条消息,是它们的摘要相同。现有的消息摘要算法消息摘要算法包含MD、SHA和MAC三大系列,常用于验证数据的完整性,是数据签名算法的核心算法。MAC与MD和SHA不同,MAC是含有密钥的散列函数算法,我们也常把MAC称为HMAC。JDK对消息摘要算法的支持JDK6支持MD2/MD5/SHA

5、/SHA256/SHA384/SHA512/HmacMD5/HmacSHA1/ HmacSHA256/HmacSHA384/HmacSHA512使用到十六进制工具类Hex.java 见:java byte数组与十六进制字符串互转MD和SHA系列的java实现:DigestUtils.javaJava代码1. importjava.security.MessageDigest;2. importjava.security.NoSuchAlgorithmException;3. 4. /*5. *referenceapachecommonshttp:/commons.apache.org/code

6、c/7. *8. *supportMD2/MD5/SHA/SHA256/SHA384/SHA5129. *authorAub10. *11. */12. publicclassDigestUtils13. 14. /*15. *根据给定摘要算法创建一个消息摘要实例16. *17. *paramalgorithm18. *摘要算法名19. *return消息摘要实例20. *seeMessageDigest#getInstance(String)21. *throwsRuntimeException22. *当linkjava.security.NoSuchAlgorithmException发

7、生时23. */24. staticMessageDigestgetDigest(Stringalgorithm)25. try26. returnMessageDigest.getInstance(algorithm);27. catch(NoSuchAlgorithmExceptione)28. thrownewRuntimeException(e.getMessage();29. 30. 31. 32. /*33. *获取MD5消息摘要实例34. *35. *returnMD5消息摘要实例36. *throwsRuntimeException37. *当linkjava.security

8、.NoSuchAlgorithmException发生时38. */39. privatestaticMessageDigestgetMd5Digest()40. returngetDigest(MD5);41. 42. 43. /*44. *获取SHA-1消息摘要实例45. *46. *returnSHA-1消息摘要实例47. *throwsRuntimeException48. *当linkjava.security.NoSuchAlgorithmException发生时49. */50. privatestaticMessageDigestgetShaDigest()51. return

9、getDigest(SHA);52. 53. 54. /*55. *获取SHA-256消息摘要实例56. *57. *returnSHA-256消息摘要实例58. *throwsRuntimeException59. *当linkjava.security.NoSuchAlgorithmException发生时60. */61. privatestaticMessageDigestgetSha256Digest()62. returngetDigest(SHA-256);63. 64. 65. /*66. *获取SHA-384消息摘要实例67. *68. *returnSHA-384消息摘要实

10、例69. *throwsRuntimeException70. *当linkjava.security.NoSuchAlgorithmException发生时71. */72. privatestaticMessageDigestgetSha384Digest()73. returngetDigest(SHA-384);74. 75. 76. /*77. *获取SHA-512消息摘要实例78. *79. *returnSHA-512消息摘要实例80. *throwsRuntimeException81. *当linkjava.security.NoSuchAlgorithmException发

11、生时82. */83. privatestaticMessageDigestgetSha512Digest()84. returngetDigest(SHA-512);85. 86. 87. /*88. *使用MD5消息摘要算法计算消息摘要89. *90. *paramdata91. *做消息摘要的数据92. *return消息摘要(长度为16的字节数组)93. */94. publicstaticbyteencodeMD5(bytedata)95. returngetMd5Digest().digest(data);96. 97. 98. /*99. *使用MD5消息摘要算法计算消息摘要10

12、0. *101. *paramdata102. *做消息摘要的数据103. *return消息摘要(长度为32的十六进制字符串)104. */105. publicstaticStringencodeMD5Hex(bytedata)106. returnHex.encodeHexStr(encodeMD5(data);107. 108. 109. /*110. *使用SHA-1消息摘要算法计算消息摘要111. *112. *paramdata113. *做消息摘要的数据114. *returnSHA-1消息摘要(长度为20的字节数组)115. */116. publicstaticbyteen

13、codeSHA(bytedata)117. returngetShaDigest().digest(data);118. 119. 120. /*121. *使用SHA-1消息摘要算法计算消息摘要122. *123. *paramdata124. *做消息摘要的数据125. *returnSHA-1消息摘要(长度为40的十六进制字符串)126. */127. publicstaticStringencodeSHAHex(bytedata)128. returnHex.encodeHexStr(getShaDigest().digest(data);129. 130. 131. /*132. *

14、使用SHA-256消息摘要算法计算消息摘要133. *134. *paramdata135. *做消息摘要的数据136. *returnSHA-256消息摘要(长度为32的字节数组)137. */138. publicstaticbyteencodeSHA256(bytedata)139. returngetSha256Digest().digest(data);140. 141. 142. /*143. *使用SHA-256消息摘要算法计算消息摘要144. *145. *paramdata146. *做消息摘要的数据147. *returnSHA-256消息摘要(长度为64的十六进制字符串)

15、148. */149. publicstaticStringencodeSHA256Hex(bytedata)150. returnHex.encodeHexStr(encodeSHA256(data);151. 152. 153. /*154. *使用SHA-384消息摘要算法计算消息摘要155. *156. *paramdata157. *做消息摘要的数据158. *returnSHA-384消息摘要(长度为43的字节数组)159. */160. publicstaticbyteencodeSHA384(bytedata)161. returngetSha384Digest().diges

16、t(data);162. 163. 164. /*165. *使用SHA-384消息摘要算法计算消息摘要166. *167. *paramdata168. *做消息摘要的数据169. *returnSHA-384消息摘要(长度为86的十六进制字符串)170. */171. publicstaticStringencodeSHA384Hex(bytedata)172. returnHex.encodeHexStr(encodeSHA384(data);173. 174. 175. /*176. *使用SHA-512消息摘要算法计算消息摘要177. *178. *paramdata179. *做消

17、息摘要的数据180. *returnSHA-512消息摘要(长度为64的字节数组)181. */182. publicstaticbyteencodeSHA512(bytedata)183. returngetSha512Digest().digest(data);184. 185. 186. /*187. *使用SHA-512消息摘要算法计算消息摘要188. *189. *paramdata190. *做消息摘要的数据191. *returnSHA-512消息摘要(长度为128的十六进制字符串)192. */193. publicstaticStringencodeSHA512Hex(byt

18、edata)194. returnHex.encodeHexStr(encodeSHA512(data);195. 196. 197. 参考mons.codec.digest.DigestUtils下载地址:http:/commons.apache.org/codec/download_codec.cgiMAC系列的java实现Hmac.javaJava代码1. importjava.security.InvalidKeyException;2. importjava.security.Key;3. importjava.security.NoSuchAlgorithmException;4.

19、 5. importjavax.crypto.KeyGenerator;6. importjavax.crypto.Mac;7. importjavax.crypto.SecretKey;8. importjavax.crypto.spec.SecretKeySpec;9. 10. /*11. *Hmac12. *algorithmHmacMD5/HmacSHA/HmacSHA256/HmacSHA384/HmacSHA51213. *authorAub14. */15. publicclassHmac16. 17. /*18. *根据给定密钥生成算法创建密钥19. *20. *paramal

20、gorithm21. *密钥算法22. *return密钥23. *throwsRuntimeException24. *当linkjava.security.NoSuchAlgorithmException发生时25. */26. privatestaticbytegetHmacKey(Stringalgorithm)27. /初始化KeyGenerator28. KeyGeneratorkeyGenerator=null;29. try30. keyGenerator=KeyGenerator.getInstance(algorithm);31. catch(NoSuchAlgorithm

21、Exceptione)32. thrownewRuntimeException(e.getMessage();33. 34. /产生密钥35. SecretKeysecretKey=keyGenerator.generateKey();36. /获得密钥37. returnsecretKey.getEncoded();38. 39. 40. /*41. *获取HmaMD5的密钥42. *43. *returnHmaMD5的密钥44. *throwsRuntimeException45. *当linkjava.security.NoSuchAlgorithmException发生时46. */4

22、7. publicstaticbytegetHmaMD5key()48. returngetHmacKey(HmacMD5);49. 50. 51. /*52. *获取HmaSHA的密钥53. *54. *returnHmaSHA的密钥55. *throwsRuntimeException56. *当linkjava.security.NoSuchAlgorithmException发生时57. */58. publicstaticbytegetHmaSHAkey()59. returngetHmacKey(HmacSHA1);60. 61. 62. /*63. *获取HmaSHA256的密钥64. *65. *returnHmaSHA256的密钥66. *throwsRuntimeException67. *当linkjava.security.NoSuchAlgorithmException发生时68. */69. publicstaticbytegetHmaSHA256key()70. returngetHmacKey(HmacSHA256);71. 72. 73. /*74. *获取HmaSHA384的密钥75. *76.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1