MD5変換でJAVA


輸入java.io.UnsupportedEncodingException。

輸入java.security.MessageDigestの;

輸入java.security.NoSuchAlgorithmException。

インポートにjava.security.SecureRandom;

輸入java.util.Arrays。

インポートjava.util.Scanner;

 

パブリッククラスMD5 {   

       

    プライベート静的最終文字列HEX_NUMS_STR =「0123456789ABCDEF」。   

    = 12プライベート静的最終整数SALT_LENGTH。   

       

    / **   

     *バイト配列16進文字列に変換   

     * @param六角   

     * @return   

     * / 

    パブリック静的バイト[] hexStringToByte(文字列六角){   

        INT LEN =(hex.length()/ 2)。   

        バイト[]結果=新しいバイト[LEN]。   

        CHAR [] hexChars = hex.toCharArray()。   

        以下のために(INT i = 0; iがLEN <; iは++){   

            int型のPOS =私は2 *;   

            結果[I] =(バイト)(HEX_NUMS_STR.indexOf(hexChars [POS])<< 4 | HEX_NUMS_STR.indexOf(hexChars [POS + 1]))。   

        }   

        結果を返します。   

    }   

 

       

    / ** 

     * 16進文字列に指定されたバイト配列に変換 

     * @param bの 

     * @return 

     * / 

    公共の静的な文字列byteToHexString(バイト[] B){   

        StringBufferのhexString =新しいStringBufferを();   

        以下のために(INT i = 0; iは<てb.length; iは++){ 

        // 0XFFの小数255、Javaの0Xが使わ進文字に記載されており、現在のバイトを取って、この時間は反転を表し

            ストリングヘクス= Integer.toHexString(B [i]が&0xFFで)。  

            IF(hex.length()== 1){   

                進= '0' +六角;   

            }   

            hexString.append(hex.toUpperCase())。   

        }   

        hexString.toStringを返します();   

    }   

    / ** 

     暗号化された文字列の後に得られた* 16進形式

     * @paramパスワード 

     * @return 

     * @throws持つNoSuchAlgorithmException 

     * @throwsにUnsupportedEncodingException 

     * / 

    公共の静的な文字列getEncryptedPwd(文字列sourceString)   

            持つNoSuchAlgorithmException、にUnsupportedEncodingExceptionは{スロー   

        //配列変数暗号化されたパスワードを宣言   

        バイト[] PWD = NULL;   

        //乱数ジェネレータ   

        SecureRandomランダム=新しいのSecureRandom();   

        //宣言配列変数塩   

        バイト[]塩=新しいバイト[SALT_LENGTH]。   

        //変数塩に乱数   

        random.nextBytes(塩)。   

 

        //メッセージダイジェストオブジェクトを宣言   

        MessageDigest MD = NULL;   

        //メッセージダイジェストを作成します   

        MD = MessageDigest.getInstance( "MD5")。   

        //データ受信メッセージは、オブジェクト塩ダイジェスト   

        md.update(塩)。   

        ターゲットメッセージダイジェストに//パスワードデータ   

        md.update(sourceString.getBytes( "UTF-8"));   

        //バイト配列をメッセージダイジェストを取得   

        バイト[])(= md.digestを消化。   

 

        //塩のバイト配列がパスワードに格納されるので、バイト長を加えた塩   

        PWD =新しいバイト[digest.length + SALT_LENGTH]。   

        塩を摂取した場合、バイト配列の最初の12のバイトをコピーする//塩のバイトは、パスワード認証に暗号化されたパスワードを生成しました   

        System.arraycopyの(塩、0、PWD、0、SALT_LENGTH)。   

        //バイトのメッセージは暗号化されたパスワードは13バイト目からのスタートバイト配列にコピーされたダイジェスト   

        System.arraycopyの(0、PWD、SALT_LENGTH、digest.lengthダイジェスト)。   

        //バイト配列フ​​ォームを暗号化するためのパスワードは16進数の文字列形式のパスワードに変換されます。   

        byteToHexString(PWD)を返します。   

    } 

    

    / ** 

     *パスワードを確認することは正当です 

     * @paramパスワード 

     * @param passwordInDb 

     * @return 

     * @throws持つNoSuchAlgorithmException 

     * @throwsにUnsupportedEncodingException 

     * / 

    パブリック静的ブールvalidPassword(文字列sourceString、文字列md5String)   

            持つNoSuchAlgorithmException、にUnsupportedEncodingExceptionは{スロー   

        バイト配列にパスワードを変換する// 16進数の文字列形式   

        バイト[] pwdInDb = hexStringToByte(md5String)。   

        //変数塩を宣言   

        バイト[]塩=新しいバイト[SALT_LENGTH]。   

        //データベースから抽出されたバイト配列の塩からパスワードを保存   

        System.arraycopyの(pwdInDb、0、塩、0、SALT_LENGTH)。   

        //メッセージダイジェストオブジェクトを作成します   

        するMessageDigest MD = MessageDigest.getInstance( "MD5")。   

        //データ受信メッセージは、オブジェクト塩ダイジェスト   

        md.update(塩)。   

        ターゲットメッセージダイジェストに//パスワードデータ   

        md.update(sourceString.getBytes( "UTF-8"));   

        //パスワード生成されたメッセージダイジェスト   

        バイト[])(= md.digestを消化。   

        //データベースのパスワードのメッセージダイジェストを保持する変数を宣言   

        バイト[] digestInDb =新しいバイト[pwdInDb.length - SALT_LENGTH]。   

        //パスワードデータベースのメッセージダイジェストを取得   

        System.arraycopyの(pwdInDb、SALT_LENGTH、digestInDb、0、digestInDb.length)。   

        //同じパスワード生成したメッセージダイジェストと、メッセージに従って比較は、データベース内のダイジェストか否か   

        IF(をArrays.equals(digestInDbダイジェスト)){   

            //正しいパスワードは、パスワードのメッセージに一致返します   

            trueを返します。   

        }他{   

            //パスワードがメッセージに一致しない正しいパスワードを返しません   

            falseを返します。   

        }   

    }  

 

    パブリック静的無効メイン(文字列[] args){

    System.out.println( "----------------- MD5暗号化開始--------------------");

    {試します

    System.out.print(「-----------------あなたが実行プレスの内容は、入力暗号化したい入力してください:」);

    スキャナスキャナ=新しいスキャナ(System.in)。

    ストリングsourceString = scanner.nextLine()。

    ストリングmd5String = getEncryptedPwd(sourceString)。

   

    System.out.println( "----------暗号化前:" + sourceString)。

    System.out.println( "----------暗号化後:" + md5String)。

    ブールfalg = validPassword(sourceString、md5String)。

    System.out.println( "----------チェック入力文字列結果:" + falgを)。

}キャッチ(持つNoSuchAlgorithmException電子){

// TODO自動生成されたcatchブロック

e.printStackTrace();

}キャッチ(にUnsupportedEncodingException電子){

// TODO自動生成されたcatchブロック

e.printStackTrace();

}

System.out.println( "----------------- MD5暗号化エンド--------------------");

    }

}



おすすめ

転載: blog.51cto.com/14028890/2411457