문자열 MD5를 사용하여 암호화

  . (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 }

 

추천

출처www.cnblogs.com/zk-blog/p/12612150.html