साल्ट व रैंडम टोकन जनरेटर
क्रिप्टोcrypto.getRandomValues से क्रिप्टोग्राफ़िक रूप से सुरक्षित रैंडम साल्ट व टोकन हेक्स या Base64 में बनाएँ।
इस पृष्ठ पर
साल्ट क्या है?#
साल्ट यादृच्छिक डेटा का एक टुकड़ा है जिसे आप किसी हैशिंग प्रक्रिया में मिलाते हैं ताकि दो समान इनपुट अलग आउटपुट दें। इसका काम अद्वितीयता है, गोपनीयता नहीं: एक साल्ट उस हैश के बगल में सादे टेक्स्ट में बैठ सकता है जिसकी वह रक्षा करता है, और फिर भी वह उस हमले को हराता है जो इस पर निर्भर है कि एक ही पासवर्ड वाला हर यूज़र एक ही डाइजेस्ट में हैश होता है। एक बार जब हर पासवर्ड की अपनी साल्ट होती है, तो हमलावर पूरे डेटाबेस में एक पूर्व-गणनित तालिका पुनः उपयोग नहीं कर सकता — उसे प्रति प्रविष्टि दोबारा गणना करनी पड़ती है।
यह पेज crypto.getRandomValues के साथ क्रिप्टोग्राफ़िक रूप से सशक्त यादृच्छिक बाइट्स बनाता है और उन्हें आपको तीन एन्कोडिंग्स में थमाता है: हेक्स (प्रति बाइट दो कैरेक्टर्स, पासवर्ड साल्ट्स और अखंडता टोकनों के लिए परिपाटी), बेस64 (अधिक कॉम्पैक्ट), और बेस64url (URL- और फ़ाइलनाम-सेफ़ वेरिएंट जो +// को -/_ से बदलती है और = पैडिंग हटाती है, JWT और साइन्ड URL में उपयोग)।
वही आदिम एक सामान्य-प्रयोजन यादृच्छिक-टोकन जनरेटर का दोहरा काम करता है: API कुंजीयाँ, nonce वैल्यूज़, अपारदर्शी ID, और एक-बार के टोकन सब “कुछ यादृच्छिक बाइट्स, टेक्स्ट के रूप में एन्कोडेड” हैं, जो कि ठीक वही है जो यह बनाता है।
इसका उपयोग कैसे करें#
- बाइट्स की संख्या सेट करें। 16 (128 बिट्स) का डिफ़ॉल्ट मानक साल्ट आकार है; फ़ील्ड तब स्वीकार करता है जब आपको एक लंबा टोकन चाहिए, 8192 तक।
- कोई फ़ॉर्मेट चुनें: हेक्स, बेस64, या बेस64url।
- उत्पन्न पर क्लिक करें, फिर कॉपी। स्थिति पट्टी दिखाती है कि परिणाम कितने बिट्स की एन्ट्रॉपी निरूपित करता है (बाइट्स × 8), ताकि आप एक नज़र में पुष्टि कर सकें कि आपको वही मिला जिसका आपने अनुरोध किया था।
प्रमुख विशेषताएँ#
- निष्पक्ष यादृच्छिक बाइट्स।
crypto.getRandomValuesसे स्रोतित, ब्राउज़र का क्रिप्टोग्राफ़िक रूप से सशक्त जनरेटर। - तीन एन्कोडिंग्स। साल्ट्स और चेकसम के लिए हेक्स; कॉम्पैक्ट टोकनों के लिए बेस64; किसी भी चीज़ के लिए बेस64url जो URL, फ़ाइलनाम, या JSON में यात्रा करती है।
- ईमानदार एन्ट्रॉपी रिपोर्टिंग। स्थिति पट्टी एन्कोडेड स्ट्रिंग लंबाई के बजाय वास्तविक बिट गणना बताती है, जिसे गलत पढ़ा जाना आसान है।
- 8192 बाइट्स तक। वही औज़ार एक 16-बाइट साल्ट और एक 256-बाइट कुंजी ढेर दोनों सेवा करता है।
- ज़ीरो अपलोड। जनरेशन स्थानीय है; यादृच्छिक बाइट्स कभी प्रेषित नहीं होते।
कार्य उदाहरण#
तीनों फ़ॉर्मेट्स में से प्रत्येक में 16 बाइट्स उत्पन्न करें। एक 16-बाइट निकास 128 बिट्स की एन्ट्रॉपी है, और एन्कोडेड लंबाइयाँ यादृच्छिक वैल्यूज़ की परवाह किए बिना नियत रहती हैं:
- हेक्स — 32 कैरेक्टर्स, जैसे
7a4c9f1e0b8d2635c4a1e9f07b2d4861 - बेस64 —
==पैडिंग के साथ 24 कैरेक्टर्स, जैसे8MDwarqMD7B594C5hCB1zQ== - बेस64url — 22 कैरेक्टर्स, पैडिंग हटाई गई, जैसे
8MDwarqMD7B594C5hCB1zQ
(ऊपर के वैल्यूज़ आकार को दर्शाते हैं; आपका वास्तविक आउटपुट हर क्लिक पर भिन्न होता है क्योंकि बाइट्स ताज़ा यादृच्छिक होते हैं।) 256-बिट साल्ट या कुंजी के लिए 32 बाइट्स पर बढ़ाएँ और लंबाइयाँ नियतात्मक रूप से बढ़ती हैं: 64 हेक्स कैरेक्टर्स, 44 बेस64 कैरेक्टर्स, 43 बेस64url कैरेक्टर्स। बाइट गणना और एन्कोडेड लंबाई के बीच वह नियत संबंध एक त्वरित तरीका है यह तर्कसंगत जाँचने का कि आपने जितना इरादा किया उतना ही आकार जनरेट किया।
अक्सर पूछे जाने वाले प्रश्न#
क्या साल्ट को गुप्त रहना ज़रूरी है?#
नहीं। साल्ट का उद्देश्य अद्वितीयता है — यह सुनिश्चित करती है कि एक ही पासवर्ड को दो बार हैश करने पर अलग डाइजेस्ट मिलें। इसे हैश के साथ सादे टेक्स्ट में संग्रहित किया जाता है, और इससे योजना कमज़ोर नहीं होती। जो चीज़ गुप्त रहनी चाहिए वह HMAC में कुंजी या एन्क्रिप्शन में पासवर्ड है, साल्ट नहीं।
मुझे कितने बाइट्स जनरेट करने चाहिए?#
16 बाइट्स (128 बिट्स) पासवर्ड साल्ट्स और अधिकांश टोकनों के लिए मानक है — यह आकस्मिक collision को प्रभावी रूप से असंभव बनाता है। सत्र टोकनों या किसी ऐसी चीज़ के लिए जिसे आप किसी अच्छी तरह वित्तपोषित हमलावर के विरुद्ध लंबे समय तक टिकाना चाहते हैं, 32 बाइट्स (256 बिट्स) एक आरामदेहक मार्जिन है। जब तक कोई विशिष्ट प्रोटोकॉल अनिवार्य न करता हो, उससे आगे आमतौर पर अति-प्रयास है।
बेस64 और बेस64url में क्या अंतर है?#
दोनों वही बाइट्स एन्कोड करते हैं, पर बेस64 + और / उपयोग करता है, जो URL और फ़ाइलनाम तोड़ते हैं, और = से पैड करता है। बेस64url उन्हें - और _ से बदलती है और पैडिंग हटा देती है, इसलिए परिणाम सीधे URL पाथ, क्वेरी स्ट्रिंग, या फ़ाइलनाम में बिना एस्केप किए डाला जा सकता है। JWT, साइन्ड URL, और अपारदर्शी टोकनों के लिए बेस64url का उपयोग करें; सादे बेस64 तब जब आउटपुट डेटा फ़ील्ड्स के अंदर ही रहता हो।
क्या मैं इसे एक API कुंजी के रूप में उपयोग कर सकता हूँ?#
हाँ। बेस64url में 32 बाइट्स उत्पन्न करें और आपके पास 256 बिट्स एन्ट्रॉपी वाला 43-कैरेक्टर टोकन है — एक API कुंजी या एक लंबे समय तक चलने वाले बियरर टोकन के लिए पर्याप्त से अधिक। बस इसे तुरंत कॉपी करना सुनिश्चित करें, क्योंकि वैल्यू स्थानीय रूप से जनरेट होती है और बाद में पुनर्प्राप्त नहीं हो सकती।