2017-01-17 2 views
0

더 나은 보안을 위해 SHA-1에서 SHA-512로 변경하려고하지만 변경 방법을 완전히 알 수는 없습니다.SHA-1에서 SHA-512로 변경

이는 SHA-1 내 방법 :

public static String sha1Convert(String password) { 
      try { 
       MessageDigest crypt = MessageDigest.getInstance("SHA-1"); 
       crypt.reset(); 
       crypt.update(password.getBytes("UTF-8")); 
       return byteToHex(crypt.digest()); 
      } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) { 
       Logger.getLogger(UserLoginManaged.class.getName()).log(Level.SEVERE, null, ex); 
       return null; 
      } 
     } 

이 내가 해왔 던 방법이 있지만이 때문에 완전히 좋은 일하고 있는지 확실하지 않다 (내가 뭔가 잘못하고있는 중이 야 나도 미안 해요). sha-1을 sha-512로 변경하려고하지만 내 응용 프로그램에 로그온하려고하면 암호가 잘못되었다고 알려줍니다. 그래서 내가 잘못한 방법을 쓰는 것인지, 아니면 내가 무언가에 대해 무지한 것인지 확실하지 않습니다.

public static String sha512Convert(String password) { 
    try { 
     MessageDigest sh = MessageDigest.getInstance("SHA-512"); 
     sh.reset(); 
     sh.update(password.getBytes()); 
     StringBuilder sb = new StringBuilder(); 
     for (byte b : sh.digest()) sb.append(Integer.toHexString(0xff & b)); 
     return sb.toString(); 
    } catch (NoSuchAlgorithmException e) { 
     Logger.getLogger(UserLoginManaged.class.getName()).log(Level.SEVERE, null, e); 
     throw new RuntimeException(e); 
    } 
} 

답변

2

암호 보안 관점에서, SHA-1, SHA-512 사이의 차이가 거의 없음이 모두 아래 1us로 계산 될 수있다. SHA-1에서 업그레이드해야하는 이유가 있지만 이것은 하나가 아닙니다.

비밀번호 보호를 위해 해시를 사용하지 말고 PBKDF2 (일명 Rfc2898DeriveBytes), password_hash/password_verify, Bcrypt 및 이와 유사한 기능을 사용하십시오.

요즘에는 1 천만 단어 목록의 암호를 사용하여 암호가 "손상되었습니다". 암호를 해시 할 시간은 랩톱에서 <1us이며 공격자는 훨씬 빠르게 진행됩니다. 스피어 낚시가 아닌 한 공격자는 가장 쉬운 90 %를 기쁘게 생각합니다.

요점은 공격자가 무차별 암호로 많은 시간을 소비하도록하는 것입니다.

사용자를 보호하는 것이 중요합니다. 안전한 비밀번호 방법을 사용하십시오.

+0

SHA-512로 바꾸고 싶을뿐 아니라 더 나은 보안을 유지하는 것이 유일한 이유는 아닙니다. 그러나 그것은 그들 중 하나뿐이었습니다. 아직 댓글 주셔서 감사합니다. – Lea