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 D1 = N / 16 。 25 INT D2 = N-16%; 26れる // 外出配列添字D1、D2 hexDigitsデータによる 27 戻り hexdigits [D1] + hexdigits [D2]; 28 } 29 30 パブリック 静的文字列MD5Encode(原点ストリング、ストリングたcharsetName){ 31です ResultString =文字列のNULL ; 32 試み{ 33は ResultString = 新しい新しい文字列(原点); 34れる // するMessageDigestオブジェクトは、MD5ダイジェストアルゴリズム取得 35 するMessageDigest MessageDigest.getInstance MD =( "MD5"を) 36 IF(たcharsetName == NULL || "" .equals(たcharsetName)) 37 // 暗号化されたデータは16進数の文字列に変換された後バイト 38れる ResultString = byteArrayToHexString(md.digest(ResultString 39 .getBytesを())) ; 40 他 41である ResultString = byteArrayToHexString(md.digest(ResultString 42れる .getBytes(たcharsetName))); 43である } キャッチ(例外exception){ 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 試み{ 59 // MD5アルゴリズムオブジェクトを作成し、MD5、16バイト×8 = 128の配列を得ること 60 。ハッシュ= MessageDigest.getInstance( "MD5")(するString.getBytes( "UTF-8"ダイジェスト))。 61 } キャッチ(持つNoSuchAlgorithmException電子){ 62 投 新規のRuntimeException( "許、MD5がサポートすべきか?" 、E)。 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((B&0xFFでのInteger.toHexString )); 72 } 73は、 リターンヘクス。 toString()は、toUpperCase();. 74 } 75 76 / ** 77 * MD5暗号化された文字列(下ケース32) 78 * 79 * @paramの列MD5暗号化文字列の必要性 80 * @return 暗号化された文字列(小文字) 81 * / 82 公共の 静的Md5Encrypt32Lowerストリング(文字列){ 83 // 直接小文字に変換する方法上記 84 リターンmd5Encrypt32Upper(文字列).toLowerCase(); 85 } 86 87 / ** 88 *バイト配列バイナリ進数に紐システム 89 * 90 * @param バイトバイナリアレイ 91である * @return 進列 92 * / 93 パブリック 静的文字列bytesToHex(バイト[]バイト){ 94 のStringBuffer hexstrの= 新しい新規のStringBuffer(); 95 INT NUM; 96 のために(INT iは= 0; bytes.length iは<; iは++ ){ 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(\\ P {XDIGIT} {4}))" ); 114 マッチャーマッチャー= pattern.matcher(STR)。 115 チャーCH。 116 一方(matcher.find()){ 117 CH =(CHAR)Integer.parseInt(matcher.group(2)、16 )。 118 STR = str.replace(matcher.group(1)、CH + "" )。 119 } 120 戻りSTR。 121 } 122 123 公共 静的 ボイドメイン(文字列[]引数){ 124 のSystem.out.println(md5Encrypt32Lower( "123456" )); 125 のSystem.out.println(md5Encrypt32Upper( "123456" )); 126 } 127 }