Java의 MD5 및 SHA 해싱

MD5는 MIT 대학의 Ronaled Rivest 교수가 개발한 일련의 알고리즘 중 하나입니다(Rivest, 1994). MD4가 안전하지 않을 가능성이 있는 것으로 나타났을 때 MD5는 MD4를 대체하도록 설계되었습니다. MD4의 약점은 나중에 Hans Dobbertin에 의해 발견되었습니다.
SHA 해시 함수는 미국 NSA(National Security Agency)에서 설계했습니다. SHA는 Secure Hash Algorithm의 약자입니다. 세 가지 SHA 알고리즘은 다르게 구성되며 SHA-0, SHA-1 및 SHA-2로 구분됩니다. SHA-2 제품군은 SHA-224, SHA-256, SHA-384 및 SHA-512.이 자습서에서는 두 가지 해시 방법 MD5 및 SHA-256을 사용하여 보안상의 이유로 문자열을 해시하는 방법을 설명합니다. 해싱을 사용하면 한 방향으로만 인코딩할 수 있으며 이것이 가장 큰 장점이므로 암호화 및 암호 해독에 키를 사용하는 암호화와 달리 해시는 되돌릴 수 없습니다.

MD5이 예에서는 MD5.

import java.security.MessageDigest; 

public class md5_java
{
public static void main(String[] args)throws Exception
{
String password = "123456789";

MessageDigest md = MessageDigest.getInstance("MD5");
md.update(비밀번호.getBytes());

바이트 byteData[] = md.digest();

//비트 배열을 16진수 형식으로 변환 - method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}

System.out.println("16진수 형식: " + sb.toString());

//bitarray를 16진수 형식으로 변환 - method 2
StringBuffer hexString = new StringBuffer();
for (int i=0; 나는< byteData.length를 사용합니다. i++) {
문자열 hex=Integer.toHexString(0xff & byteData[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(16진수);
}
System.out.println("헥사 형식: " + hexString.toString());
}
}
출력:

 
16진수 형식: 25f9e794323b453885f5181f1b624d0b
16진수 형식: 25f9e794323b453885f5181f1b624d0b

MD5

MD5의 보안이 심각하게 손상되었습니다. 그 약점은 지상에서 악용되었습니다. 암호에 MD5를 사용하는 것은 안전한 방법이 아니기 때문에 나쁜 생각입니다. 사용자 암호와 같은 민감한 데이터에는 항상 SHA를 사용해야 합니다.

import java.security.MessageDigest; 

public class sha_java
{
public static void main(String[] args)throws Exception
{
문자열 암호 = "123456789";

MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(비밀번호.getBytes());

바이트 byteData[] = md.digest();

//비트 배열을 16진수 형식으로 변환 - method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}

System.out.println("16진수 형식: " + sb.toString());

//bitarray를 16진수 형식으로 변환 - method 2
StringBuffer hexString = new StringBuffer();
for (int i=0; 나는< byteData.length를 사용합니다. i++) {
문자열 hex=Integer.toHexString(0xff & byteData[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(16진수);
}
System.out.println("헥사 형식: " + hexString.toString());
}
}
출력:

 
16진수 형식: 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225
16진수 형식: 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225

참조:
https:// en.wikipedia.org/wiki/MD5
https://en.wikipedia.org/wiki/Secure_Hash_Algorithm
MD5는 암호 해싱 함수로서 얼마나 약합니까?