비밀번호를 까먹어서 재설정을 하는 경우가 많습니다.
저 같은 경우는 계정마다 비번을 다르게 하다보니 특히 더 그런 경우가 많은데
거기에다가 특수문자까지 쓰게되면 아주 난리가 나죠 ㅠㅠ
결국 포기하고 비밀번호를 재설정 하게 되는데
이전에 쓰던 비밀번호는 쓸 수 없다는 알럿이 뜨면....ㅡㅡ^
요즘은 대부분 비밀번호를 알려주진 않고 재설정을 하라고 하죠 ㅋㅋㅋ
예전에는 중간중간에 *표시로 비번을 알려줬었는데 말이죠
이렇게 된 데에는 페이지 관리자쪽에서 비밀번호를 알 수가 없기 때문이 큽니다.
그런데 어떻게 비밀번호는 모른다면서 이전 비밀번호는 아는 걸까요??
이건 유저의 비밀번호를 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
이렇게 이상하게 긴 값이 나오죠 ㅋㅋㅋ
이 값이 저장되다보니 관리자쪽에선 알 수 없게 됩니다 ㅋㅋㅋ안풀리니까요
이상!! 비밀번호는 모르면서 이전 비밀번호는 어떻게 체크할 수 있는건지 알아봤습니다 ㅋㅋ
....음...끝??!!ㅋㅋㅋ
'개발놈' 카테고리의 다른 글
[javascript] 쿠키 써서 더블클릭 막기 (0) | 2022.07.25 |
---|---|
[ANDROID] 버튼 더블클릭 방지하는 방법 (0) | 2022.07.22 |
네이버 지도 api 연동하기 (0) | 2022.05.12 |