MD5Util.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.uas.eis.utils;
  2. import java.security.MessageDigest;
  3. import java.security.NoSuchAlgorithmException;
  4. public class MD5Util {
  5. // 全局数组
  6. private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
  7. "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
  8. /**
  9. * MD5加密
  10. * @param message
  11. * @return
  12. */
  13. public static String getEncryption(String message){
  14. String result = "";
  15. if(message != null){
  16. try {
  17. MessageDigest md = MessageDigest.getInstance("MD5"); //指定加密方式
  18. //加密
  19. byte[] bytes = md.digest(message.getBytes());
  20. for(int i = 0; i < bytes.length; i++){
  21. // 将整数转换成十六进制形式的字符串 这里与0xff进行与运算的原因是保证转换结果为32位
  22. String str = Integer.toHexString(bytes[i] & 0xFF);
  23. if(str.length() == 1){
  24. str += "F";
  25. }
  26. result += str;
  27. }
  28. } catch (NoSuchAlgorithmException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. return result;
  33. }
  34. public static String encodeByMD5(String originString) {
  35. if (originString != null) {
  36. try {
  37. MessageDigest md = MessageDigest.getInstance("MD5");
  38. byte[] results = md.digest(originString.getBytes());
  39. String resultString = byteArrayToHexString(results);
  40. return resultString.toUpperCase();
  41. } catch (Exception ex) {
  42. ex.printStackTrace();
  43. }
  44. }
  45. return null;
  46. }
  47. public static String byteArrayToHexString(byte[] bArr) {
  48. StringBuffer sb = new StringBuffer(bArr.length);
  49. String sTmp;
  50. for (int i = 0; i < bArr.length; i++) {
  51. sTmp = Integer.toHexString(0xFF & bArr[i]);
  52. if (sTmp.length() < 2){
  53. sb.append(0);
  54. }
  55. sb.append(sTmp.toUpperCase());
  56. }
  57. return sb.toString();
  58. }
  59. /**
  60. * hex字符串转byte数组
  61. * @param inHex 待转换的Hex字符串
  62. * @return 转换后的byte数组结果
  63. */
  64. public static byte[] hexToByteArray(String inHex){
  65. int hexlen = inHex.length();
  66. byte[] result;
  67. if (hexlen % 2 == 1){
  68. //奇数
  69. hexlen++;
  70. result = new byte[(hexlen/2)];
  71. inHex="0"+inHex;
  72. }else {
  73. //偶数
  74. result = new byte[(hexlen/2)];
  75. }
  76. int j=0;
  77. for (int i = 0; i < hexlen; i+=2){
  78. result[j]=(byte)Integer.parseInt(inHex.substring(i,i+2),16);
  79. j++;
  80. }
  81. return result;
  82. }
  83. public static String encrypt32(String strObj) {
  84. String resultString = null;
  85. try {
  86. resultString = new String(strObj);
  87. MessageDigest md = MessageDigest.getInstance("MD5");
  88. // md.digest() 该函数返回值为存放哈希值结果的byte数组
  89. resultString = byteToString(md.digest(strObj.getBytes()));
  90. } catch (NoSuchAlgorithmException ex) {
  91. ex.printStackTrace();
  92. }
  93. return resultString;
  94. }
  95. public static String encrypt32Up(String strObj){
  96. return encrypt32(strObj).toUpperCase();
  97. }
  98. public static String encrypt16(String strObj){
  99. return encrypt32(strObj).substring(8,24);
  100. }
  101. public static String encrypt16Up(String strObj){
  102. return encrypt32Up(strObj).substring(8,24);
  103. }
  104. // 转换字节数组为16进制字串
  105. private static String byteToString(byte[] bByte) {
  106. StringBuffer sBuffer = new StringBuffer();
  107. for (int i = 0; i < bByte.length; i++) {
  108. sBuffer.append(byteToArrayString(bByte[i]));
  109. }
  110. return sBuffer.toString();
  111. }
  112. // 返回形式为数字跟字符串
  113. private static String byteToArrayString(byte bByte) {
  114. int iRet = bByte;
  115. if (iRet < 0) {
  116. iRet += 256;
  117. }
  118. int iD1 = iRet / 16;
  119. int iD2 = iRet % 16;
  120. return strDigits[iD1] + strDigits[iD2];
  121. }
  122. }