dsfsdfsdfsdfsdfgger
40
2018-08-10 18:39:01 작성 2018-08-10 21:04:50 수정됨
5
203

jsp 비밀번호 SHA256 암호화 질문 드립니다.!!!ㅠㅠ


UserDAO.java 에 join부분에SHA256.testSHA256() 값을 추가 시켰는데 암호화되지는 않고 -1 반한 하네요 ㅠ

joinAction.jsp 에서 값을 처리해서  join에 보낼때 아래 처럼 해서 보내고 있어요 ㅠ

<jsp:setProperty name="user" property="userPassword"/>

UserDAO userDAO = new UserDAO();

int result = userDAO.join(user);

if(result == -1){

PrintWriter script =response.getWriter();

script.println("<script>");

script.println("alert('이미 존재하는 아이디 입니다.')");

script.println("history.back()");

script.println("</script>");

==========================================

SHA256.java

package user;


import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;


public class SHA256 {

public static String testSHA256(String str){

String SHA = ""; 

try{

MessageDigest sh = MessageDigest.getInstance("SHA-256"); 

sh.update(str.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(NoSuchAlgorithmException e){

e.printStackTrace(); 

SHA = null; 

}

return SHA;

}

}


UserDAO.java

//회원가입

public int join(User user) {

String SQL = "INSERT INTO USER VALUES (?,?,?,?,?)";

String a="123";

SHA256.testSHA256(a);

try {

pstmt = conn.prepareStatement(SQL);

pstmt.setString(1, user.getUserID());

pstmt.setString(2, SHA256.testSHA256(user.getUserPassword()));

pstmt.setString(3, user.getUserName());

pstmt.setString(4, user.getUserGender());

pstmt.setString(5, user.getUserEmail());

return pstmt.executeUpdate();

} catch(Exception e) {

e.printStackTrace();

}

return -1;

}


0
0
  • 답변 5

  • 아야로
    597
    2018-08-10 19:30:24
    질문 내용과는 별개로 MD5는 결함이 있는 암호체계 입니다. 적게는 수 분에서 한 시간 내로 풀린다고들 하네요.
    1
  • 호랭
    100
    2018-08-11 01:55:52

    참고로 SHA-256는 암호화 알고리즘이라 아니라 해쉬 알고리즘입니다. 해쉬 알고리즘으로 암호화를 할 수가 없습니다.

    AES가 추천받는 암호화 방식입니다.

    0
  • 진리와자유
    167
    2018-08-11 05:20:58

    1. 암호화 코드는 이상 없습니다.

    2. UserDAO는 무조건 -1을 반환하네요. 코딩한 대로 동작한 겁니다.

    3. 질문글의 경우 AES를 쓸 필요가 없습니다. 비밀번호를 해쉬하는 것이기 때문에.

    4. 강력한 해쉬함수도 사전 공격에 취약할 수 있습니다.

        사전에 있는 단어를 죄다 해쉬해 놓고 DB 화를 해 놓으면 간단한 비밀번호는 풀립니다.

        그러니 실무에서는 salt를 주시고 해쉬를 반복적으로 해주세요.


    0
  • 호랭
    100
    2018-08-11 06:15:44

    진리와자유님 말씀이 맞네요. 암호화만 생각해서 위에 그렇게 적었는데 생각해보니 비밀번호니까 해쉬를 해야하는 군요. 그리고 위에서 말씀하신대로 salt를 꼭 주시기 바랍니다. 

    0
  • dsfsdfsdfsdfsdfgger
    40
    2018-08-11 18:44:24

    해결 했습니다 .다들 감사합니다.  DB varchar 값 수정하니 되네요 다들 감사합니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.