기본 사항 : MessageDigest 클래스 사용
실제로 Java에서 MD5 암호화를 완료하기 위해서는 대부분의 MessageDigest 클래스가이를 구현하는 데 도움이되며 몇 줄의 코드로 충분합니다.
/** * 문자열 md5 * * @param str * @return */import java.security.messagegegegest; public static string getmd5 (string) {try {// md5 암호화 계산을 생성합니다. digestageestestestest md = messagedigest.getInstance ( "md5"); // md5 함수 계산 md.update (str.getBytes ()); // digest ()는 마지막으로 MD5 해시 값이 반환되고 리턴 값이 문자열로 8이라고 결정합니다. MD5 HASH 값은 16 비트 16 진수 값이므로 실제로 8 비트 문자입니다. // BigInteger 함수는 8 비트 문자열을 16 비트 16 진수 값으로 변환하고 문자열로 나타납니다. 문자열 형태로 해시 값을 가져옵니다. 새로운 biginteger (1, md.digest ()). Tostring (16); } catch (예외 e) {Throw New SpeedException ( "MD5 암호화 오류가 발생했습니다"); }} 고급 : 암호화 및 암호 해독
Java는 테스트 클래스를 통해 MD5 암호화 및 암호 해독 클래스를 구현하여 자세한 내용은 코드를 참조하십시오.
MD5 암호화 및 암호 해독 클래스 -Mymd5util, 코드는 다음과 같습니다.
package com.zyg.security.md5; import java.io.unsupportedencodingexception; import java.security.messagegegest; import java.security.nosuchalgorithmexception; import java.security.securerandom; import java.util.arrays {private extatic mymd5util {private class mymd5util. hex_nums_str = "0123456789ABCDEF"; 개인 정적 최종 정수 Salt_length = 12; / ** * 육각 문자열을 바이트 배열로 변환 * @param hex * @return * / public static byte [] hexstringtobyte (String hex) {int len = (hex.length () / 2); 바이트 [] 결과 = 새로운 바이트 [Len]; char [] hexchars = hex.tochararray (); for (int i = 0; i <len; i ++) {int pos = i * 2; 결과 [i] = (byte) (hex_nums_str.indexof (hexchars [pos]) << 4 | hex_nums_str.indexof (hexchars [pos + 1]); } 반환 결과; } / ** * 지정된 바이트 배열을 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 (문자열 비밀번호, 문자열 암호) nosuchalgorithmection, hepportedexcome and unsupportedexcome {// supportedexemence {insupportedexcome 배열 바이트 [] pwdindb = hexstringtobyte (passwordindb); // 소금 변수 바이트를 선언합니다 [] salt = new Byte [salt_length]; // 데이터베이스 시스템에 저장된 바이트 어레이에서 소금을 추출합니다. ArrayCopy (pwdindb, 0, salt, 0, salt_length); // 메시지를 만듭니다 Digest 객체 messageDigest md = messageDigest.getInstance ( "md5"); // 소금 데이터를 메시지 소화 객체에 일시 중지합니다. // 비밀번호 데이터를 메시지 소화 객체에 전달합니다. // 입력 비밀번호의 메시지 다이제스트를 생성합니다. byte [] digest = md.digest (); // 데이터베이스 바이트에서 비밀번호의 메시지 다이제스트를 저장하는 변수를 선언합니다 [] digestindb = new Byte [pwdindb.length -salt_length]; // 데이터베이스 시스템에서 비밀번호의 메시지 다이제스트를 가져옵니다. ArrayCopy (pwdindb, salt_length, digestindb, 0, digestindb.length); // 입력 비밀번호를 기반으로 생성 된 메시지 소화가 데이터베이스의 메시지 다이제스트와 동일하지만 (arrays.equals (digest, digestindb)) {// 암호 일치 메시지를 올바르게 반환합니다. } else {// 비밀번호 잘못 반환 비밀번호 불일치 메시지가 false를 반환합니다. }} /** * 암호화 된 16 진수 비밀번호를 가져옵니다. 바이트 [] pwd = null; // 랜덤 번호 Generator Securrandom random = new Securerandom (); // 소금 배열 변수 바이트를 선언합니다 [] salt = new Byte [salt_length]; // 임의의 숫자를 소금 변수 random.nextbytes (salt)에 넣습니다. // 메시지 digest 객체 messageDigest md = null; // 메시지를 만듭니다 Digest Md = MessageDigest.getInstance ( "MD5"); // 소금 데이터를 메시지 소화 객체에 일시 중지합니다. // 비밀번호의 데이터를 메시지 Digest 객체 md.update (password.getBytes ( "utf-8"))에 전달합니다. // 메시지의 바이트 배열을 가져옵니다. 다이제스트 바이트 [] digest = md.digest (); // 소금은 비밀번호의 바이트 배열에 저장되기 때문에 소금의 바이트 길이를 추가하십시오. // 비밀번호 시스템을 확인할 때 소금을 꺼내기 위해 생성 된 암호화 된 암호 바이트 배열의 처음 12 바이트에 소금 바이트를 복사하십시오. // 13 번째 바이트 시스템에서 시작하는 암호화 된 암호 바이트 배열의 바이트에 소화 메시지를 복사합니다. ArrayCopy (Digest, 0, pwd, salt_length, digest.length); // 암호 암호화 바이트 배열 형식을 16 진수 문자열 형식으로 변환 비밀번호 비밀번호 반환 BYTETOHEXSTRING (PWD); }}테스트 클래스 - 클라이언트, 코드는 다음과 같습니다.
package com.zyg.security.md5; import java.io.unsupportedEncodingException; import java.security.nosuchalgorithmexception; import java.util.hashmap; import java.util.map; public class {private static map user = new hashmap (); public static void main (String [] args) {String username = "zyg"; 문자열 암호 = "123"; 등록기 (사용자 이름, 비밀번호); username = "Changong"; 비밀번호 = "456"; 등록기 (사용자 이름, 비밀번호); 문자열 loginuserid = "zyg"; 문자열 pwd = "1232"; try {if (loginValid (loginUserId, pwd)) {System.out.println ( "로그인에 오신 것을 환영합니다 !!!"); } else {system.out.println ( "비밀번호 오류, 재입고 !!!"); }} catch (nosuchalgorithmexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); } catch (UnsupportedEncodingException e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }} / ** * 등록 된 사용자 * * @param username * @param password * / public static void registeruser (문자열 사용자 이름, 문자열 비밀번호) {String EncryptedPwd = null; try {encryptedpwd = mymd5util.getencryptedpwd (비밀번호); user.put (username, encryptedpwd); } catch (nosuchalgorithmexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); } catch (UnsupportedEncodingException e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }} / ** * 검증 로그인 * * @param username * @param password * @return * @throws unsupportedencodingexception * @throws nosuchalgorithmexception * / public static boolean loginvalid (String username, string password) nosuchalgorithmexception, string inspportedingexmence} (문자열) users.get (사용자 이름); if (null! = pwdindb) {//이 사용자는 retring mymd5util.validpassword (password, pwdindb); } else {system.out.println ( "이 사용자는 존재하지 않습니다!!!"); 거짓을 반환합니다. }}}추신 : 다음은 두 가지 MD5 암호화 도구가 더 있습니다. 관심있는 친구들은 그것을 참조 할 수 있습니다.
MD5 온라인 암호화 도구 :
http://tools.vevb.com/password/createmd5password
온라인 MD5/HASH/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160 암호화 도구 :
http://tools.vevb.com/password/hash_md5_sha