2017-01-17 31 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和類似函數的函數。

這些天通過嘗試從1000萬字列表中的密碼「密碼」是「破解」。在筆記本電腦上密碼的時間是< 1us,攻擊者的速度會快幾個數量級。除非是獵魚,否則攻擊者會對最簡單的90%滿意。

重點是讓攻擊者花費大量的時間通過暴力破解密碼。

保護您的用戶很重要,請使用安全的密碼方法。

+0

更好的安全性不是我想要更改爲SHA-512的唯一原因。但這只是其中之一。仍然感謝評論 – Lea