2011-07-27 15 views
10

मैं SHA2 के साथ कुछ पासवर्ड हैश करने की कोशिश कर रहा हूं।जावा में SHA2 पासवर्ड हैशिंग

मैं जावा कोड का एक टुकड़ा के लिए कि कहाँ मिल सकता है?

मैं उस पोस्ट को देखा है, लेकिन मैं कुछ कमी है: SHA2 password storage with Java

Mac mac = Mac.getInstance("HmacSha256"); 
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), "HmacSha256"); 
mac.init(secret); 
byte[] shaDigest = mac.doFinal(phrase.getBytes()); 
String hash = ""; 
for(byte b:shaDigest) { 
    hash += String.format("%02x",b); 
} 

वाक्यांश स्ट्रिंग मैं चाहता हूँ सही सांकेतिक शब्दों में बदलना है? और क्या कुंजी (लाइन 2)

अग्रिम धन्यवाद

+0

FYI करें: आप पढ़ सकते हैं पासवर्ड हैशिंग के बारे में कुछ सवाल। हालांकि हैश पासवर्ड के लिए यह अच्छा है, लेकिन यह सही तरीके से करने के लिए गैर-तुच्छ है। इस प्रश्न में कुछ अच्छे उत्तर हैं: [जावा में हैश पासवर्ड के लिए लाइब्रेरी के लिए सुझाव] (http://stackoverflow.com/questions/2860943/suggestions-for-library-to-hash-passwords-in-java) –

उत्तर

0

वाक्यांश पासवर्ड है कि आप को बचाने के लिए कोशिश कर रहे हैं होगा। key नमक है, इंद्रधनुष तालिकाओं को हराने के लिए हैशिंग से पहले अपने पासवर्ड में एक अद्वितीय (और ज्ञात) स्ट्रिंग संलग्न है। या यह कम से कम होना चाहिए। आपका कोड बस इसे पासवर्ड से ही ले रहा है, जो कि व्यर्थ है। यह एक लंबी यादृच्छिक स्ट्रिंग होना चाहिए जो पासवर्ड पचाने के साथ एक साथ संग्रहीत किया जाता है।

8

आप कॉमन्स-कोडेक के कार्यान्वयन का उपयोग

String hash = org.apache.commons.codec.digest.DigestUtils.sha256Hex(password +"salt"); 
+0

यह नहीं है जावा एसई में – Supuhstar

22

पहले विचार कर सकते हैं, तो आप स्पष्ट होना यह क्या आप क्या करना चाहते है की जरूरत है। आप कहते हैं कि आप एक पासवर्ड रखना चाहते हैं, लेकिन आप जिस कोड का उपयोग कर रहे हैं वह मैक (Message Authentication Code) के लिए है, विशेष रूप से, HMAC

Hashes और MACs विभिन्न प्रयोजनों के लिए अलग अलग बातें (HMAC एक हैश का उपयोग शामिल है, हालांकि) कर रहे हैं। आपको यह सुनिश्चित करने की ज़रूरत है कि आप अपनी आवश्यकता के लिए सही उपयोग कर रहे हैं।

कारण आप एक महत्वपूर्ण आपूर्ति करने के लिए कहा जा रहा है क्योंकि MACs एक महत्वपूर्ण जरूरत है। हैश नहीं है:

public byte[] hash(String password) throws NoSuchAlgorithmException { 
    MessageDigest sha256 = MessageDigest.getInstance("SHA-256");   
    byte[] passBytes = password.getBytes(); 
    byte[] passHash = sha256.digest(passBytes); 
    return passHash; 
} 
10

मैं एक छोटे से Rossum के कोड को संशोधित, नमक जोड़ा गया है और स्ट्रिंग के प्रकार लौटने कनवर्ट करते हैं,, ट्राई/कैच जोड़ने शायद यह किसी के लिए मदद मिलेगी:

public String hash(String password) { 
    try { 
     MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); 
     String salt = "some_random_salt"; 
     String passWithSalt = password + salt; 
     byte[] passBytes = passWithSalt.getBytes(); 
     byte[] passHash = sha256.digest(passBytes);    
     StringBuilder sb = new StringBuilder(); 
     for(int i=0; i< passHash.length ;i++) { 
      sb.append(Integer.toString((passHash[i] & 0xff) + 0x100, 16).substring(1));   
     } 
     String generatedPassword = sb.toString(); 
     return generatedPassword; 
    } catch (NoSuchAlgorithmException e) { e.printStackTrace(); }  
    return null; 
} 
संबंधित मुद्दे