개발놈

[JAVA]비밀번호는 알 수 없다면서 어떻게 이전 비밀번호는 알까??(feat.해시)

100009 2022. 6. 17. 14:48
728x90
반응형

728x90

비밀번호를 까먹어서 재설정을 하는 경우가 많습니다.

저 같은 경우는 계정마다 비번을 다르게 하다보니 특히 더 그런 경우가 많은데

거기에다가 특수문자까지 쓰게되면 아주 난리가 나죠 ㅠㅠ

 

결국 포기하고 비밀번호를 재설정 하게 되는데

이전에 쓰던 비밀번호는 쓸 수 없다는 알럿이 뜨면....ㅡㅡ^

요즘은 대부분 비밀번호를 알려주진 않고 재설정을 하라고 하죠 ㅋㅋㅋ

예전에는 중간중간에 *표시로 비번을 알려줬었는데 말이죠

이렇게 된 데에는 페이지 관리자쪽에서 비밀번호를 알 수가 없기 때문이 큽니다.

 

그런데 어떻게 비밀번호는 모른다면서 이전 비밀번호는 아는 걸까요??

 

이건 유저의 비밀번호를 db에 저장할 때 해시(암호화) 후 저장하기 때문입니다.

해시란 뭐 이런저런 얘기가 있지만 간단히 얘기하자면 복호화되지 않는 암호(풀리지 않는 암호)값이라고 보면 됩니다.

그렇기 때문에 관리자는 유저의 비밀번호는 알 수 없게 되는거죠

대신 재설정한 비밀번호를 해시했더니 이전과 똑같네?? 하면 이전 비밀번호로 재설정을 할 수 없다!! 라고 띄우는 겁니다.

 

다른 여러 해시방법이 있겠지만 MD5나 SHA-256이 주로 쓰이는 걸로 알고 있는데요

MD5는 결함도 있다고 하니 SHA-256이 조금 더 좋을 거 같네요

 

MD5

public String  getMD5String(String input) throws Exception {
byte[] digest = MessageDigest.getInstance("MD5").digest(input.getBytes());
StringBuffer s = new StringBuffer();

for (int i = 0; i < digest.length; i++) {
s.append(Integer.toString((digest[i] & 0xf0) >> 4, 16));
s.append(Integer.toString(digest[i] & 0x0f, 16)); 
}
return s.toString();
}

 

SHA-256

public String getSHA256String(String input) throws Exception{
String SHA = ""; 
try{
MessageDigest sh = MessageDigest.getInstance("SHA-256"); 
sh.update(input.getBytes()); 
byte byteData[] = sh.digest();
StringBuffer sb = new StringBuffer(); 
for(int i = 0 ; i < byteData.length ; i++){
sb.append(Integer.toString((byteData[i]&0xff) + 0x100, 16).substring(1));
}
SHA = sb.toString();

}catch(Exception e){
e.printStackTrace(); 
SHA = null; 
}
return SHA;
}

 

java 소스 입니다.

위 두개 소스로 한량이라는 문자를 암호화를 시켜보면

MD5 해시 : a6a2710eeee3a66a7fe67ac0c353e8f6
SHA-256 해시 : 0c53c0daa8c05a3ee9774135fb6cb253a2c4e9d1fbcda7ba606608b6a36d35a3

이렇게 이상하게 긴 값이 나오죠 ㅋㅋㅋ

이 값이 저장되다보니 관리자쪽에선 알 수 없게 됩니다 ㅋㅋㅋ안풀리니까요

 

이상!! 비밀번호는 모르면서 이전 비밀번호는 어떻게 체크할 수 있는건지 알아봤습니다 ㅋㅋ

....음...끝??!!ㅋㅋㅋ

728x90