1. import lombok.extern.slf4j.Slf4j;
    2. import java.security.MessageDigest;
    3. import java.util.Random;
    4. @Slf4j
    5. public class Md5Util {
    6. private static byte[] md5(String s) {
    7. MessageDigest algorithm;
    8. try {
    9. algorithm = MessageDigest.getInstance("MD5");
    10. algorithm.reset();
    11. algorithm.update(s.getBytes("UTF-8"));
    12. byte[] messageDigest = algorithm.digest();
    13. return messageDigest;
    14. } catch (Exception e) {
    15. log.error("MD5 Error...", e);
    16. }
    17. return null;
    18. }
    19. private static final String toHex(byte hash[]) {
    20. if (hash == null) {
    21. return null;
    22. }
    23. StringBuffer buf = new StringBuffer(hash.length * 2);
    24. int i;
    25. for (i = 0; i < hash.length; i++) {
    26. if ((hash[i] & 0xff) < 0x10) {
    27. buf.append("0");
    28. }
    29. buf.append(Long.toString(hash[i] & 0xff, 16));
    30. }
    31. return buf.toString();
    32. }
    33. public static String hash(String s) {
    34. try {
    35. return new String(toHex(md5(s)).getBytes("UTF-8"), "UTF-8");
    36. } catch (Exception e) {
    37. log.error("not supported charset...{}", e);
    38. return s;
    39. }
    40. }
    41. /**
    42. * 对密码按照用户名,密码,盐进行加密
    43. * @param username 用户名
    44. * @param password 密码
    45. * @param salt 盐
    46. * @return
    47. */
    48. public static String encryptPassword(String username, String password, String salt) {
    49. return Md5Util.hash(username + password + salt);
    50. }
    51. /**
    52. * 对密码按照密码,盐进行加密
    53. * @param password 密码
    54. * @param salt 盐
    55. * @return
    56. */
    57. public static String encryptPassword(String password, String salt) {
    58. return Md5Util.hash(password + salt);
    59. }
    60. /**
    61. * 生成salt的静态方法
    62. * @param n
    63. * @return
    64. */
    65. public static String getSalt(int n){
    66. char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()".toCharArray();
    67. StringBuilder sb = new StringBuilder();
    68. for (int i=0;i<n;i++){
    69. char aChar = chars[new Random().nextInt(chars.length)];
    70. sb.append(aChar);
    71. }
    72. return sb.toString();
    73. }
    74. }