में एक पीबीकेडीएफ 2-SHA256 पासवर्ड हैश बनाने के लिए कैसे मुझे एक पीबीकेडीएफ 2-SHA256 पासवर्ड हैश बनाने की ज़रूरत है, लेकिन मुझे कुछ परेशानी हो रही है।सी #/बाउंसी कैसल
मैंने Bouncy Castle रेपो डाउनलोड किया, लेकिन यूनिट टेस्ट में जो खोज रहा था उसे ढूंढने में थोड़ा फंस गया।
कुछ नमूना कोड here मिला, लेकिन यह केवल SHA1 करता है। कोड का मुख्य बिट है:
/// <summary>
/// Computes the PBKDF2-SHA1 hash of a password.
/// </summary>
/// <param name="password">The password to hash.</param>
/// <param name="salt">The salt.</param>
/// <param name="iterations">The PBKDF2 iteration count.</param>
/// <param name="outputBytes">The length of the hash to generate, in bytes.</param>
/// <returns>A hash of the password.</returns>
private static byte[] PBKDF2(string password, byte[] salt, int iterations, int outputBytes)
{
var pdb = new Pkcs5S2ParametersGenerator();
pdb.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt,
iterations);
var key = (KeyParameter)pdb.GenerateDerivedMacParameters(outputBytes * 8);
return key.GetKey();
}
मुझे इसे SHA1 से SHA256 में बदलने की आवश्यकता है।
जावा प्रलेखन और this post से, ऐसा लगता है कि निम्नलिखित संभव होगा, लेकिन सी # लाइब्रेरी में कन्स्ट्रक्टर पर कोई अधिभार नहीं है।
var pdb = new Pkcs5S2ParametersGenerator(new Sha256Derived());
ढेर अतिप्रवाह पर another article ढूँढना, मैंने सोचा निम्नलिखित संभव हो सकता है, लेकिन SHA हैशिंग एल्गोरिदम देखने सूची में नहीं हैं, तो निम्नलिखित काम नहीं करेगा।
var bcparam = (KeyParameter)pdb.GenerateDerivedParameters("sha256", outputBytes * 8);
मुझे यह काम करने के लिए क्या करने की ज़रूरत है?
नोट: यदि आप इसे पढ़ते हैं और बाउंसी कैसल में नहीं जानते हैं, लेकिन एक और तरीका जानते हैं, तो भी मैं आपकी मदद की सराहना करता हूं।
स्रोत कोड उपलब्ध है। ऐसा क्यों नहीं करते? –
@JamesKPolk - एक वैध टिप्पणी। कारण हैं: ए क्योंकि मुझे यह अच्छी तरह से समझ में नहीं आता है और बी। मुझे लगता है कि एन्क्रिप्शन की बात आती है तो मुझे किसी भी तरह से रोलिंग गंभीर नहीं माना जाता है। हालांकि शायद यह सेटअप के साथ छेड़छाड़ कर रहा है, यह ठीक हो सकता है। मैंने माना कि एक रास्ता होना चाहिए, लेकिन शायद सी # बाउंसीकास्ट जावा संस्करण के पीछे पीछे है और इसमें अभी शामिल नहीं है? यदि वास्तव में सी # में ऐसा करने का कोई तरीका नहीं है तो मैं जावा संस्करण के आधार पर पुल अनुरोध का प्रयास कर सकता हूं और कोड अपडेट कर सकता हूं। वास्तव में कुछ उपलब्ध था जो मैं बस उपयोग कर सकता था। – HockeyJ