मैं डेटाबेस में पासवर्ड सुरक्षित रूप से स्टोर करने की कोशिश कर रहा हूं और इसके लिए मैंने पीबीकेडीएफ 2 फ़ंक्शन का उपयोग करके उत्पन्न हैश को स्टोर करना चुना है। मैं उछाल वाली महल लाइब्रेरी का उपयोग करके ऐसा करना चाहता हूं लेकिन मुझे नहीं पता कि मैं इसे जेसीई इंटरफ़ेस का उपयोग करके क्यों काम नहीं कर सकता ... समस्या यह है कि हैश को 3 अलग-अलग मोड में उत्पन्न करना:
1. का उपयोग करना PBKDF2WithHmacSHA1 गुप्त कुंजी उछाल वाले महल एपीआई सीधे
3. JCE
के माध्यम से उछाल वाले महल का उपयोग कर परिणाम 2 अलग-अलग मान में उपयोग करते हुए सूरज
2. द्वारा प्रदान कारखाना: एक पहले दो और तीसरे के लिए एक के लिए आम। मुझे पता है कि PBKDF2 HMAC SHA1 का उपयोग कर तो यह है कि मैं क्यों एल्गोरिथ्म के रूप में पिछले विधि "PBEWITHHMACSHA1" जो मैं उछाल वाले महल जावा डॉक्स से ले लिया में चुना है कार्यान्वित किया जाता हैजावा में बाउंसीकैसल के साथ पीबीकेडीएफ 2
//Mode 1
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec keyspec = new PBEKeySpec("password".toCharArray(), salt, 1000, 128);
Key key = factory.generateSecret(keyspec);
System.out.println(key.getClass().getName());
System.out.println(Arrays.toString(key.getEncoded()));
//Mode 2
PBEParametersGenerator generator = new PKCS5S2ParametersGenerator();
generator.init(PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(("password").toCharArray()), salt, 1000);
KeyParameter params = (KeyParameter)generator.generateDerivedParameters(128);
System.out.println(Arrays.toString(params.getKey()));
//Mode 3
SecretKeyFactory factorybc = SecretKeyFactory.getInstance("PBEWITHHMACSHA1", "BC");
KeySpec keyspecbc = new PBEKeySpec("password".toCharArray(), salt, 1000, 128);
Key keybc = factorybc.generateSecret(keyspecbc);
System.out.println(keybc.getClass().getName());
System.out.println(Arrays.toString(keybc.getEncoded()));
System.out.println(keybc.getAlgorithm());
:
यहाँ मेरी कोड है ।
com.sun.crypto.provider.SunJCE_ae
[-53, 29, 113, -110, -25, 76, 115, -127, -64, 74, -63, 102, 75, 81, -21, 74]
[-53, 29, 113, -110, -25, 76, 115, -127, -64, 74, -63, 102, 75, 81, -21, 74]
org.bouncycastle.jce.provider.JCEPBEKey
[14, -47, -87, -16, -117, -31, 91, -121, 90, -68, -82, -31, -27, 5, -93, -67, 30, -34, -64, -40]
PBEwithHmacSHA
कोई भी विचार:
उत्पादन पीछा कर रहा है?
के संगत है मुझे यकीन है कि क्या "मोड 3" कर रही है नहीं कर रहा हूँ, लेकिन मैं इसे उपेक्षा होगी। यह आउटपुट 160 बिट्स है, 128 नहीं, जैसा आपने अनुरोध किया था। 160 बिट्स एसएचए -1 हैश का आकार है। पोर्टेबिलिटी के लिए, मैं "मोड 1." के साथ रहना चाहता हूं। – erickson
मैं एरिक्सन से सहमत हूं - क्या आपके पास "मोड 3" का उपयोग करने के लिए वास्तविक आवश्यकता है या पासवर्ड को सुरक्षित रूप से संग्रहीत करने के लिए "मोड 1" स्वीकार्य होगा? रास्ते में अपने पहले प्रश्न के लिए अच्छा विस्तृत प्रश्न। –
वास्तव में कोई ज़रूरत नहीं है। मैं बस यह समझने की कोशिश कर रहा हूं कि बाउंसीकास्टल से PBEWITHHMACSHA1 क्यों एक ही काम नहीं करता है। और मैं सहमत हूं, पोर्टेबिलिटी मुद्दों के कारण मैं दूसरी विधि का चयन नहीं करूंगा। –