MessageDigest 클래스
MessageDigest 클래스는 MD5 또는 SHA 알고리즘과 같은 정보 다이제스트 알고리즘의 기능을 응용 프로그램에 제공합니다. 정보 다이제스트는 모든 크기의 데이터를 수신하고 고정 길이 해시 값을 출력하는 안전한 일방 통행 해시 기능입니다.
MessageDigest 객체가 초기화되기 시작합니다. 이 개체는 update () 메소드를 사용하여 데이터를 처리합니다. 언제든지 Reset () 메소드를 호출하여 요약을 재설정 할 수 있습니다. 업데이트 해야하는 모든 데이터가 업데이트되면 해시 계산을 완료하기 위해 Digest () 메소드 중 하나를 호출해야합니다.
다이제스트 방법은 주어진 양의 업데이트 데이터에 대해서만 한 번만 호출 할 수 있습니다. 다이제스트가 호출되면 MessageDigest 객체가 초기 상태로 재설정됩니다.
설명 :
웹 사이트에서 웹 사이트 회원의 사용자 이름 및 비밀번호와 같은 개인 정보 정보를 보호하기 위해 등록시 MD5 또는 기타 방법으로 직접 암호화합니다. 데이터베이스 관리자조차도 멤버의 비밀번호 및 기타 정보를 볼 수 없습니다. 데이터베이스의 비밀번호 효과는 다음과 같습니다. 8E830882F03B2CB84D1A657F346DD41A 효과.
MD5 알고리즘은 돌이킬 수 없기 때문에 많은 웹 사이트에서 널리 사용됩니다.
일반적으로 사용되는 세 가지 암호화 방법
방법 1 : 비트 연산자를 사용하여 암호화 된 데이터를 16 진수로 변환하여 형식을 사용하여 암호화 된 데이터를 16 진수로 변환합니다 (권장)
방법 3 : 알고리즘을 사용하여 암호화 된 데이터를 16 진수로 변환합니다.
import java.security.messagedigest; import java.security.nosuchalgorithmexception;/*** java* @author xiaokui*/public class alcryptionutil {/***와 함께 제공되는 MessageDigest 클래스를 사용합니다. md5와 sha-1 이후, 가장 큰 특성이 있었기 때문에 그들의 가장 큰 특성이 있습니다. 다이제스트는 MD5 다이제스트보다 32 비트 길이입니다 (1Byte = 8 비트, 4BSES 길이에 해당합니다. * 강제 공격의 경우, MD5는 2128의 운영이며 SHA-1은 2160의 순서의 운영입니다. * 동일한 다이제스트가있는 두 메시지의 어려움 : MD5는 264의 작동이며, SHA-1은 280의 순서 작동입니다. * 따라서 SHA-1은 강제 공격에 대해 더 강력합니다. 그러나 SHA-1은 MD5 (80:64)보다 사이클 단계가 많고 처리 할 캐시가 더 크기 때문에 (160 비트 : 128 비트), SHA-1은 MD5보다 느리게 실행됩니다. * * * @param 소스 문자열 암호화 * @param hashtype 암호화 유형 (md5 및 sha) * @return */public static string gethash (문자열 소스, 문자열 해시 테스) {// hexDigits [] = { '0', '1', '2', '4', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', '3', '3', '3', '3', '3' '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try {messageDigest md = messageDigest.getInstance (hashtype); md.update (source.getBytes ()); // 업데이트 방법을 사용하여 데이터를 처리하여 지정된 바이테는 업데이트를 업데이트합니다. [] md.digest (); // 해시 계산을 완료하기 위해 암호 텍스트를 얻고, 128 비트 긴 정수 문자 문자 [16 * 2] = new char [16 * 2]; // 각 바이트가 166 진수로 표시되면 int k = 0; // (int i = 0; i <16; i ++)의 전환 결과에서 해당 문자 위치를 사용합니다. 16 진 문자 Byte Byte0 = alcryptstr [i]; // i-th byte str [k ++] = hexdigits [byte0 >>> 4 & 0xf]; // byte에서 4 비트의 수치 적 변환을 취하기 위해, >>> 논리적 시프트를 오른쪽으로 오른쪽으로 바꾸십시오 [k ++] = hexdigits [by++]; Byte}에서 낮은 4 비트의 수치 적 변환} 새 문자열 (str); // string} catch} catch (nosuchalgorithmexception e) {e.printstacktrace ();}/** @param source string* @param hashtype acrryption type (md5 and sha)* @sha)* @param 소스 문자열; String Gethash2 (문자열 소스, String Hashtype) {StringBuilder sb = new StringBuilder (); MessageDigest Md5; try {md5 = messageDigest.getInstance (hashtype); md5.update (byte b : md5.digest ()); {sb.append (string.format ( "%02x", b)); // 16 진수로, x는 16 진수의 출력을 의미합니다. 암호화 해야하는 @param 소스 문자열 * @param hashtype 암호화 유형 (md5 and sha) * @return */public static string gethash3 (문자열 소스, 문자열 해시 테) {// hexdigits를 변환하는 데 사용되는 문자 [] = { '0', '1', '2', '3', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', '' '9', 'a', 'b', 'c', 'd', 'e', 'f'}; StringBuilder sb = new StringBuilder (); messageDigest md5; try {md5 = messageDigest.getInstance (hashtype); i = 0; i alkryptstr.length; i ++) {int iret = encryptstr [i] {iret += 256;} int id1 = iret / 16; int2 = iret % 16; (nosuchalgorithmexception e) {e.printstacktrace ();} return null;} public static void main (string [] args) {system.out.println (gethash ( "xiaokui", "md5")); system.out.println ( "xiaokui") + " +") "/n");system.out.println(gethash2(` xiaokui", "md5")); System.out.println (gethash2 ( "xiaokui", "sha") + "/n") ;system.out.println("xiaokui", "md5"); system.out.println (gethash3 ( "xiaokui", "sha") + "/n");}}출력 결과
8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E9171712F44AAB7138 8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB713898745F91 8E830882F03B2CB84D1A657F346DDD41A 0BA5512371D00C86E91712F44AAB713898745F91
우리는 세 가지 방법이 동일한 효과를 수행했으며 SHA 길이는 MD5보다 8 자 (32 비트) 더 많다는 것을 발견했습니다.
요약
위는 Java와 함께 제공되는 암호화 클래스 MessageDigest의 코드 예제에 대한이 기사의 전체 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 단점이 있으면 메시지를 남겨 두십시오.