暗号化と復号化とMD5配置塩(ソルト値)

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    // 暗号対応するデータベースログイン塩の再暗号化の暗号化決意の入力と結合しますデータベースに格納された暗号文は同じです

 

おすすめ

転載: www.cnblogs.com/1gaoyu/p/11729255.html