MD5加密

  1. packagecom.md5.util;
  2. importjava.io.File;
  3. importjava.io.FileInputStream;
  4. importjava.io.IOException;
  5. importjava.nio.ByteBuffer;
  6. importjava.nio.channels.FileChannel;
  7. importjava.security.MessageDigest;
  8. importjava.security.NoSuchAlgorithmException;
  9. importcom.md5.Constants;
  10. /**
  11. *MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能。\
  12. */
  13. publicclassMD5Util{
  14. /**
  15. *16进制字符集
  16. */
  17. privatestaticfinalcharHEX_DIGITS[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D',
  18. 'E','F'};
  19. /**
  20. *
  21. *指定算法为MD5的MessageDigest
  22. */
  23. privatestaticMessageDigestmessageDigest=null;
  24. /**
  25. *
  26. *初始化messageDigest的加密算法为MD5
  27. */
  28. static{
  29. try{
  30. messageDigest=MessageDigest.getInstance("MD5");
  31. }catch(NoSuchAlgorithmExceptione){
  32. e.printStackTrace();
  33. }
  34. }
  35. /**
  36. *获取文件的MD5值
  37. *
  38. *@paramfile
  39. *目标文件
  40. *@returnMD5字符串
  41. */
  42. publicstaticStringgetFileMD5String(Filefile){
  43. Stringret="";
  44. FileInputStreamin=null;
  45. FileChannelch=null;
  46. try{
  47. in=newFileInputStream(file);
  48. ch=in.getChannel();
  49. ByteBufferbyteBuffer=ch.map(FileChannel.MapMode.READ_ONLY,0,file.length());
  50. messageDigest.update(byteBuffer);
  51. ret=bytesToHex(messageDigest.digest());
  52. }catch(IOExceptione){
  53. e.printStackTrace();
  54. }finally{
  55. if(in!=null){
  56. try{
  57. in.close();
  58. }catch(IOExceptione){
  59. e.printStackTrace();
  60. }
  61. }
  62. if(ch!=null){
  63. try{
  64. ch.close();
  65. }catch(IOExceptione){
  66. e.printStackTrace();
  67. }
  68. }
  69. }
  70. returnret;
  71. }
  72. /**
  73. *获取文件的MD5值
  74. *@paramfileName目标文件的完整名称
  75. *@returnMD5字符串
  76. */
  77. publicstaticStringgetFileMD5String(StringfileName){
  78. returngetFileMD5String(newFile(fileName));
  79. }
  80. /**
  81. *MD5加密字符串
  82. *@paramstr目标字符串
  83. *@returnMD5加密后的字符串
  84. */
  85. publicstaticStringgetMD5String(Stringstr){
  86. returngetMD5String(str.getBytes());
  87. }
  88. /**
  89. *MD5加密以byte数组表示的字符串
  90. *@parambytes目标byte数组
  91. *@returnMD5加密后的字符串
  92. */
  93. publicstaticStringgetMD5String(byte[]bytes){
  94. messageDigest.update(bytes);
  95. returnbytesToHex(messageDigest.digest());
  96. }
  97. /**
  98. *校验密码与其MD5是否一致
  99. *@parampwd密码字符串
  100. *@parammd5基准MD5值
  101. *@return检验结果
  102. */
  103. publicstaticbooleancheckPassword(Stringpwd,Stringmd5){
  104. returngetMD5String(pwd).equalsIgnoreCase(md5);
  105. }
  106. /**
  107. *校验密码与其MD5是否一致
  108. *
  109. *@parampwd以字符数组表示的密码
  110. *@parammd5基准MD5值
  111. *@return检验结果
  112. */
  113. publicstaticbooleancheckPassword(char[]pwd,Stringmd5){
  114. returncheckPassword(newString(pwd),md5);
  115. }
  116. /**
  117. *检验文件的MD5值
  118. *@paramfile目标文件
  119. *@parammd5基准MD5值
  120. *@return检验结果
  121. */
  122. publicstaticbooleancheckFileMD5(Filefile,Stringmd5){
  123. returngetFileMD5String(file).equalsIgnoreCase(md5);
  124. }
  125. /**
  126. *检验文件的MD5值
  127. *@paramfileName目标文件的完整名称
  128. *@parammd5基准MD5值
  129. *@return检验结果
  130. */
  131. publicstaticbooleancheckFileMD5(StringfileName,Stringmd5){
  132. returncheckFileMD5(newFile(fileName),md5);
  133. }
  134. /**
  135. *将字节数组转换成16进制字符串
  136. *@parambytes目标字节数组
  137. *@return转换结果
  138. */
  139. publicstaticStringbytesToHex(bytebytes[]){
  140. returnbytesToHex(bytes,0,bytes.length);
  141. }
  142. /**
  143. *将字节数组中指定区间的子数组转换成16进制字符串
  144. *
  145. *@parambytes
  146. *目标字节数组
  147. *@paramstart
  148. *起始位置(包括该位置)
  149. *@paramend
  150. *结束位置(不包括该位置)
  151. *@return转换结果
  152. */
  153. publicstaticStringbytesToHex(bytebytes[],intstart,intend){
  154. StringBuildersb=newStringBuilder();
  155. for(inti=start;i<start+end;i++){
  156. sb.append(byteToHex(bytes[i]));
  157. }
  158. returnsb.toString();
  159. }
  160. /**
  161. *将单个字节码转换成16进制字符串
  162. *@parambt目标字节
  163. *@return转换结果
  164. */
  165. publicstaticStringbyteToHex(bytebt){
  166. returnHEX_DIGITS[(bt&0xf0)>>4]+""+HEX_DIGITS[bt&0xf];
  167. }
  168. publicstaticvoidmain(String[]args)throwsIOException{
  169. //longbegin=System.currentTimeMillis();
  170. //Stringmd5=getFileMD5String(newFile("F://aaa.rar"));
  171. //longend=System.currentTimeMillis();
  172. //System.out.println("MD5:\t"+md5+"\nTime:\t"+(end-begin)+
  173. //"ms");
  174. System.out.println(getMD5String("123456abcd"+Constants.SALT_VALUE));
  175. }
  176. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值