. (1) 패키지 com.iwhalecloud.retail.enterprise.c.utils; 2 . 3 가져 java.io.UnsupportedEncodingException] . (4) 수입 java.security.MessageDigest의] . 5 오기 java.security.NoSuchAlgorithmException] . 6 오기 java.util.regex.Matcher] . 7 오기 있으며, java.util.regex.Pattern는; . 8 . 9 개 공용 클래스 MD5Util { 10 // 바이트 배열은 16 진수 문자열로 변환 . 11 개인 정적 스트링 byteArrayToHexString ( 바이트 B []) { 12 StringBuffer를 resultSb =새로운 새 의 StringBuffer (); (13)가 대해 ( INT ; I <b.length를 행; I ++ I = 0 ) 14 resultSb.append (byteToHexString (B [I])) 15 16 복귀 resultSb.toString () . (17) } (18)이다 . (19) // 단일 바이트의 변환이 정수 상업적 번호 모듈로 연산 복용하는 20 것은 개인 정적 스트링 byteToHexString ( 바이트 B) { 21는 INT N- = B; 22은 IF (N- <0 ) (23)는 N- + = 256 ; 24 INT는 = N- / 16 D1 ; (25) INT D2 = N-16 % ; 26이다 // 첨자 D1, D2의 hexDigits 데이터에 따라 이동 어레이 27 리턴 hexdigits는 [D1]을 + ; hexdigits [D2]을 28 } 29 30 공중 정적 스트링 MD5Encode (원점 문자열 문자열 charsetName) { 31이다 ResultString = 문자열 널 (null) ; (32) 은 try { (33)가 ResultString = 새로운 새로운 문자열 (원산지) (34)는 // MessageDigest 등 개체가 MD5 알고리즘 소화 도착 35 MessageDigest 등 MessageDigest.getInstance MD = ( "MD5를" ) 36 IF(charsetName == 널 || "" .equals (charsetName)) 37 // 암호화 된 데이터는 16 진수 문자열로 변환 된 후 바이트 38 ResultString = byteArrayToHexString (md.digest (ResultString 39 .getBytes을 ())) ; 40 다른 41 인 ResultString = byteArrayToHexString (md.digest (ResultString 42 .getBytes (charsetName))) (43)이다 } 캐치 (예외 예외) { 44이다 } 45 리턴 ResultString; 46이다 } 47 48 개인 정적 최종 문자열 hexdigits [] = { "0". "1", "2", ". (3)", ". (4)". "5" , 49 ". 6". "7", ". 8". "9", "A", "B", "C", "D", "E", "F" }; 50 / ** 51이고 *는 MD5 문자열 (32 대문자) 암호화 (52)는 * 53 인 * @param의 문자열 MD5 필수 암호화 된 문자열 (54)는 * @return 암호화 된 문자열 (위) 55 * / 56 인 공중 정적 스트링 md5Encrypt32Upper (문자열 문자열) { 57은 바이트 [] 해시; 58 은 try { 59 // MD5 알고리즘 객체를 생성하고, MD5 16 바이트 * 8 = (128)의 배열을 얻을 60 해시 MessageDigest.getInstance ( "MD5를") = 다이제스트 (하는 String.getBytes ( "UTF-8". )); 61 } 캐치 (예외 : NoSuchAlgorithmException 전자) { 62 던질 새로운 RuntimeException을을 ( "허가, MD5가 지원해야 하는가?" , 전자); 63 } 캐치 (예외 : UnsupportedEncodingException 전자) { 64 던질 새로운 의 RuntimeException를 ( "허, UTF-8은 지원 하는가?" , E); 65 } 66 67 // 转换为十六进制字符串 68 의 StringBuilder 헥스 = 새 의 StringBuilder (hash.length * 2 ); 69 대 ( 바이트 B : 해시) { 70 IF ((B & 0xFF로) "은 0x10) hex.append ("0 " ) (71)는 hex.append (는, Integer.toHexString (B & 0xFF로 )) (72) } (73)이 복귀 헥스. toString ()는를 toUpperCase (); 74 } 75 76 / ** 77 * MD5 암호화 된 문자열 (하부 케이스 (32)) 78 * 79 * @param의 문자열 MD5 암호화 문자열 필요 80 * @ 반환 암호화 된 문자열 ( 소문자) 81 * / 82 공중 정적Md5Encrypt32Lower 문자열 (문자열 문자열) { 83 // 직접 소문자로 변환하는 상기 방법 (84) 창 md5Encrypt32Upper (문자열) .toLowerCase (); 85 } 86 87 / ** 88 진수로 진수 * 바이트 배열 현 시스템 (89) * (90) * @param은 바이너리 배열 바이트 91 * @ 반환의 진수 문자열 92 * / 93 공중 정적 스트링 bytesToHex ( 바이트 [] 바이트) { 94 StringBuffer를 hexStr = 새로운 새 의 StringBuffer (); 95 INT는 NUM; 96 대 ( INT I = 0; i가 bytes.length <; 내가 ++ ) { 97 NUM = 바이트 [I]; 98 의 경우 (NUM <0 ) { 99 NUM + = 256 ; 100 } (101) 의 경우 (NUM <16 ) { 102 hexStr.append ( "0" ); 103 } 104 hexStr.append (는, Integer.toHexString (NUM)); 105 } 106 복귀 hexStr.toString ()를 toUpperCase을 ().; 107 } 108 109 / ** 110 * 유니中文编码转换成字符串 111 * / 112 공용 정적 스트링 unicodeToString (문자열 STR) { 113 패턴 무늬는 Pattern.compile = ( "(\\\\ U (\\ XDigit P {} {4}))" ); 114 Matcher를 정합 = pattern.matcher (STR); 115 CHAR CH; 116 동안 (matcher.find ()) { 117 CH = ( 숯 )있는 Integer.parseInt (matcher.group (2), 16 ); 118 STR = str.replace (matcher.group (1), CH + "" ); 119 } 120 복귀 STR; (121) } 122 123 공공 정적 무효 메인 (문자열 []에 args) { 124 에서 System.out.println (md5Encrypt32Lower ( "123456" )); 125 에서 System.out.println (md5Encrypt32Upper ( "123456" )); 126 } 127 }