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 ) );
거기 있습니다.