MD5アルゴリズム
パッケージcom.oracle.jsp.util。 輸入java.security.MessageDigestの; 輸入java.security.NoSuchAlgorithmException。 / ** * * @author wjxing * * / パブリック クラスMD5 { // 全局数组 民間 最終 静的文字列[] strDigits = { "0"、 "1"、 "2"、 "3"、 "4"、 "5" 、 "6"、 "7"、 "8"、 " 9" 、 "A"、 "B"、 "C"、 "D"、 "E"、 "F" }。 パブリックMD5(){ } // デジタルと文字列形式を返し プライベート 静的 byteToArrayString文字列(バイトbByte){ int型 IRET = bByte; // するSystem.out.println( "IRET =" + IRET); IF(IRET <0 ){ 行く + = 256 ; } int型 ID1 =行か/ 16 ; int型 ID2は= 16%を行きます。 戻り strDigits [ID1] + strDigits [ID2]。 } //は唯一デジタル形式を返す @SuppressWarnings( "未使用" ) プライベート 静的文字列byteToNum(バイトbByte){ int型 IRET = bByte。 System.out.println( "iRet1 =" + IRET)。 もし(IRET <0 ){ 行く + = 256 ; } 返すString.valueOf(IRET)を、 } // 変換バイトの16進文字列配列 プライベート 静的文字列byteToString(バイト[] bByte){ StringBufferのsBuffer = 新しいStringBufferを(); 以下のために(int型 i = 0; iはbByte.lengthを<; iは++ ){ sBuffer.append(byteToArrayString(bByte [I]))。 } 返すsBuffer.toStringを(); } パブリック 静的文字列GetMD5Code(文字列strObj){ 文字列resultString = nullを。 してみてください{ resultString = 新しい文字列(strObj)。 MDするMessageDigest = MessageDigest.getInstance( "MD5" ); // md.digest()関数は、ハッシュ値が格納されたバイト配列の結果の値を返し ResultString = byteToString(md.digest(strObj.getBytesを()))。 } キャッチ(持つNoSuchAlgorithmExceptionのEX){ ex.printStackTrace(); } 返すresultString; } }
提供ソルト値(塩)アルゴリズム
パッケージcom.oracle.jsp.util。 輸入はjava.util.ArrayList; 輸入はjava.util.List; 輸入java.util.Randomの。 パブリック クラスStringUtil { / ** *文字列の折り返しのInt * @Paramのサイクル * @return * / パブリック 静的 INT StringToInt(文字列str){ int型の結果= 0 。 してみてください{ 結果 = Integer.parseInt(STR)。 } キャッチ(NumberFormatExceptionが電子){ 結果 = 0 。 // e.printStackTrace(); } 戻り値の結果; } / ** *ソルト値(ランダムな文字列)を取得します * @paramの長さ * @return * / パブリック 静的文字列getRandomString(int型の長さ){ 文字列ベース =「abcdefghijklmnopqrstuvwxyz0123456789」。 ランダムランダム = 新しいランダム(); StringBufferのSB = 新しいStringBufferを(); 以下のために(int型 i = 0; iは長さ<; iは++ ){ int型の数= にRandom.nextInt(base.length())。 sb.append(base.charAt(番号))。 } 返すsb.toStringを(); } 公共の 静的リストの<string> splitProperties(文字列プロパティ){ 一覧 <文字列>オプション= 新しいのArrayList <文字列> (); 文字列オプション = nullを。 文字列[]の文字列 = properties.split( "" )。 以下のための(文字列:文字列){ 場合(! "0" .equals(文字列)){ オプション = string.charAt(3)+ "" ; options.add(オプション)。 } } 戻り値のオプション; } / ** *文字列ターンフロート * @Paramのサイクル * @return * / パブリック 静的 フロートstrToFlo(文字列str){ フロート I = 0 。 してみてください{ I = Integer.parseInt(STR)。 } キャッチ(例外e){ } 返す私は、 } }
具体的な方法の使用
暗号化 塩のString = StringUtil.getRandomString(10); // salt値指定された長さ取得する 文字列md5Pwd = 5.GetMD5Code(MD5.GetMD5Code(パスワード)+塩); // 暗号化方式は、パスワードとソルト値の入力を暗号化されて呼び出し、次いで、暗号文および塩必要な値は、データベースに格納されています
復号化
等号(MD5.GetMD5Code(+ rs.getStringパスワード(「塩」)))。(「パスワード」)rs.getString // 暗号対応するデータベースログイン塩の再暗号化の暗号化決意の入力と結合しますデータベースに格納された暗号文は同じです