基本:Messaged Gigestクラスの使用
実際、JavaでMD5暗号化を完了するには、MESSAGED GIGESTクラスのほとんどがそれを実装するのに役立ち、数行のコードで十分です。
/** *文字列md5 * * @param str * @return */import java.security.messagegest; public static string getmd5(string str){try {// md5暗号化計算Digest MessageStigest md = mesagedigest.getinstance( "md5"); // md5関数md.update(str.getbytes())を計算します。 // digest()は、md5ハッシュ値が戻り、戻り値が文字列として8であると判断します。 MD5ハッシュ値は16ビット16進値であるため、実際には8ビット文字// BigInteger関数が8ビット文字列を16ビットの16進値に変換し、文字列として表します。 string return new biginteger(1、md.digest())の形でハッシュ値を取得します。 } catch(Exception e){throw new SpeedException( "Md5暗号化エラーが発生しました"); }} Advanced:暗号化と復号化
Javaは、MD5の暗号化と復号化クラスをテストクラスで実装して、詳細についてはコードを参照してください。
md5暗号化と復号化クラス-mymd5util、コードは次のとおりです
パッケージcom.zyg.security.md5; Import java.io.unsupportedencodingincection; Import java.security.messagegest; Import java.security.nosuchalgorithmexception; Import java.security.securerandom; Import java.util.util.util.util.til.util.util. hex_nums_str = "0123456789ABCDEF";プライベート静的最終整数SALT_LENGTH = 12; / ** * hex文字列をバイト配列に変換 * @param hex * @return * / public static byte [] hexstringtobyte(string hex){int len =(hex.length() / 2); byte [] result = new byte [len]; char [] hexchars = hex.tochararray(); for(int i = 0; i <len; i ++){int pos = i * 2; result [i] =(byte)(hex_nums_str.indexof(hexchars [pos])<< 4 | hex_nums_str.indexof(hexchars [pos + 1])); } return result; } / ** *指定されたバイト配列を16進ストリングに変換 * @param b * @return * / public static string bytetohexstring(byte [] b){stringbuffer hexstring = new StringBuffer(); for(int i = 0; i <b.length; i ++){string hex = integer.tohexstring(b [i]&0xff); if(hex.length()== 1){hex = '0' + hex; } hexstring.append(hex.touppercase()); } return hexstring.toString(); } /** *パスワードが合法かどうかを確認 * @param password * @param passwordindb * @return * @throws nosuchalgorithmexception * @throws unsupportedencodingexception * /public static boolean validpassword(String password、sling password indb)がNosuchalgorithectipecectiptectipecectipecectipecectipecectiptをスローします。バイトアレイbyte [] pwdindb = hexstringtobyte(passwordindb); // SALT変数BYTE [] SALT = NEW BYTE [SALT_LENGTH];を宣言します。 //データベースシステムに保存されたバイト配列から塩を抽出します。 //メッセージダイジェストオブジェクトMESSAGEDGEST MD = MESSAGEDGEST.GETINSTANCE( "MD5"); //塩データをメッセージダイジェストオブジェクトMd.update(塩)にメッセージを送信します。 //パスワードデータをメッセージダイジェストオブジェクトmd.update(password.getBytes( "utf-8"))に渡す; //入力パスワードBYTE [] DIGEST = MD.DIGEST()のメッセージダイジェストを生成します。 //データベースバイトのパスワードのメッセージを保存する変数を宣言します[] digestindb = new byte [pwdindb.length -salt_length]; //データベースSystem.ArrayCopy(PWDINDB、SALT_LENGTH、DIGESTINDB、0、DIGESTINDB.LENGTH)でパスワードのメッセージのメッセージを取得します。 //入力パスワードに基づいて生成されたメッセージがデータベースのメッセージダイジェストと同じであるかどうかを比較してください(arrays.equals(digest、digestindb)){//パスワードを正しく返すメッセージを正しく返します。 } else {//パスワード不正確なパスワードを返します。 }} /** *暗号化されたヘキサデシマルパスワードを取得 * @paramパスワード * @return * @throws nosuchalgorithmexception * @throws unsupportedencodingexcepting * /public static string getEncryptedPwd(string password)スローNosuchalgorithmexceptioncections、unupportedencodedinexedexedexedexedected ardecedectedexception byte [] pwd = null; //乱数ジェネレーターSecurerAndom random = new Securerandom(); //塩アレイ変数バイト[] salt = new byte [salt_length]; //乱数を塩変数ランダムに入れます。 //メッセージダイジェストオブジェクトMESSAGED GIGEST MD = NULLを宣言します。 //メッセージの作成MD = MESSAGEDGEST.GETINSTANCE( "MD5"); //塩データをメッセージダイジェストオブジェクトMd.update(塩)にメッセージを送信します。 //パスワードのデータをメッセージダイジェストオブジェクトmd.update(password.getBytes( "utf-8"))に渡す; //メッセージダイジェストbyte [] digest = md.digest()のバイト配列を取得します。 //塩はパスワードのバイト配列に保存されるため、塩のバイトの長さを追加しますpwd = new byte [digest.length + salt_length]; //パスワードSystem.ArrayCopy(SALT、0、PWD、0、SALT_LENGTH)を検証するときに塩を出すために、生成された暗号化されたパスワードバイト配列の最初の12バイトに塩のバイトをコピーします。 // 13番目のバイトSystem.ArrayCopy(Digest、0、PWD、SALT_LENGTH、DIGEST.LENGTH)から始まる暗号化されたパスワードバイト配列のバイトにメッセージダイジェストをコピーします。 //パスワード暗号化されたバイト配列形式を16進文字列形式に変換します。 }}テストクラス - クライアント、コードは次のとおりです。
パッケージcom.zyg.security.md5; Import java.io.unsupportedencodingincection; Import java.security.nosuchalgorithmexception; Import java.util.hashmap; Import java.util.map; public class client {private static map users = new Hashmap(); public static void main(string [] args){string username = "zyg";文字列パスワード= "123"; RegisterUser(ユーザー名、パスワード); username = "changong";パスワード= "456"; RegisterUser(ユーザー名、パスワード);文字列loginuserid = "zyg";文字列pwd = "1232"; try {if(loginvalid(loginuserid、pwd)){system.out.println( "welcome to login !!!"); } else {system.out.println( "パスワードエラー、再入力してください!!!"); }} catch(nosuchalgorithmexception e){// todo auto-enerated catch block e.printstacktrace(); } catch(unsupportedencodingexception e){// todo auto-enerated catch block e.printstacktrace(); }} / ** *登録ユーザー * * @param username * @param password * / public static void registeruser(string username、string password){string encryptedpwd = null; try {encryptedPwd = mymd5util.getEncryptedPwd(パスワード); users.put(username、necryptedpwd); } catch(nosuchalgorithmexception e){// todo auto-fenated catch block e.printstacktrace(); } catch(unsupportedencodingexception e){// dodo auto-enerated catch block e.printstacktrace(); }} / ** *検証login * * @param username * @param password * @return * @throws unsupportedencodingexception * @throws nosuchalgorithmexception * / public static boolian loginalid(string username、string passwors) (string)users.get(username); if(null!= pwdindb){//このユーザーは存在しますmymd5util.validpassword(password、pwdindb); } else {system.out.println( "このユーザーは存在しません!!!"); falseを返します。 }}}PS:ここに、さらに2つのMD5暗号化ツールがあります。興味のある友達はそれを参照できます:
MD5オンライン暗号化ツール:
http://tools.vevb.com/password/createmd5password
オンラインMD5/ハッシュ/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160暗号化ツール:
http://tools.vevb.com/password/hash_md5_sha