[java] MD5 해시를 어떻게 생성 할 수 있습니까?

Java에서 문자열의 MD5 해시를 생성하는 방법이 있습니까?



답변

당신은 필요합니다 java.security.MessageDigest.

전화 MessageDigest.getInstance("MD5")의 MD5 인스턴스 얻기 위해 MessageDigest당신이 사용할 수 있습니다.

다음 중 하나를 수행하여 해시를 계산합니다.

  • 로 전체 입력을 공급하고 byte[]로 한 번의 작업으로 해시를 계산하십시오 md.digest(bytes).
  • 를 호출 하여 MessageDigest한 번에 한 byte[]청크를 공급하십시오 md.update(bytes). 입력 바이트 추가가 끝나면로 해시를 계산하십시오
    md.digest().

byte[]의해 반환되는 md.digest()것은 MD5 해시입니다.


답변

MessageDigest클래스는 MD5 다이제스트 인스턴스를 제공 할 수 있습니다.

문자열 및 암호화 클래스로 작업 할 때는 항상 바이트 표현을 원하는 인코딩을 지정해야합니다. 방금 사용 string.getBytes()하는 경우 플랫폼 기본값이 사용됩니다. (모든 플랫폼이 동일한 기본값을 사용하는 것은 아닙니다)

import java.security.*;

..

byte[] bytesOfMessage = yourString.getBytes("UTF-8");

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);

데이터 .update(byte[])가 많으면 반복해서 호출 할 수있는 메소드를 살펴보십시오 . 그런 다음 호출 .digest()하여 결과 해시를 얻습니다.


답변

실제로 바이트 배열이 아닌 문자열로 답을 원한다면 항상 다음과 같이 할 수 있습니다.

String plaintext = "your text here";
MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);
// Now we need to zero pad it if you actually want the full 32 chars.
while(hashtext.length() < 32 ){
  hashtext = "0"+hashtext;
}


답변

MD5 또는 SHA 다이제스트를 작성하는 매우 편리한 방법을 제공 하는 Apache Commons 코덱 프로젝트 의 DigestUtils 클래스 를 살펴볼 수도 있습니다 .


답변

이것을 찾았습니다 :

public String MD5(String md5) {
   try {
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        byte[] array = md.digest(md5.getBytes());
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; ++i) {
          sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
       }
        return sb.toString();
    } catch (java.security.NoSuchAlgorithmException e) {
    }
    return null;
}

아래 사이트에서 나는 그것을 인정하지 않지만 그 해결책은 효과적입니다! 나에게 많은 다른 코드가 제대로 작동하지 않아서 해시에서 0이 누락되었습니다. 이것은 PHP와 같은 것으로 보입니다. 출처 : http://m2tec.be/blog/2010/02/03/java-md5-hex-0093


답변

사용 방법은 다음과 같습니다.

final MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));
final byte[] resultByte = messageDigest.digest();
final String result = new String(Hex.encodeHex(resultByte));

진수는 여기서 org.apache.commons.codec.binary.Hex로부터 아파치 코 몬즈 프로젝트 .


답변

방금 commons-codec.jar을 다운로드 하고 md5와 같은 완벽한 PHP를 얻었습니다. 여기 수동 입니다.

프로젝트로 가져 와서 사용하십시오.

String Url = "your_url";

System.out.println( DigestUtils.md5Hex( Url ) );

거기 있습니다.