उपयोग कैसे करें
- हेक्स स्ट्रिंग को इनपुट में पेस्ट करें। स्रोत में हेक्स और लक्ष्य में Base64 पहले से चुने हुए हैं।
- फ़ॉर्मैटिंग की चिंता न करें: स्पेस, लाइन ब्रेक, कोलन, हाइफ़न और 0x या \x प्रीफ़िक्स अनदेखे कर दिए जाते हैं।
- अगर मान किसी URL, JWT या JSON Web Key में जाना है, तो लक्ष्य को Base64URL पर बदल दें।
- Base64 परिणाम कॉपी करें।
हेक्स को Base64 में क्यों बदलें
ज़्यादातर हैशिंग टूल डाइजेस्ट हेक्स में दिखाते हैं, लेकिन कई प्रोटोकॉल Base64 की अपेक्षा रखते हैं, जो एक-तिहाई छोटा होता है। आम उदाहरण:
- Subresource Integrity। स्क्रिप्ट और स्टाइलशीट पर लगने वाले
integrityएट्रिब्यूट में Base64 डाइजेस्ट होता है, जैसेsha384-के बाद 64 Base64 अक्षर। - Content Security Policy। इनलाइन स्क्रिप्ट को अनुमति देने वाले हैश Base64 मान के साथ
'sha256-...'के रूप में लिखे जाते हैं। - HTTP API में चेकसम।
Content-MD5हेडर और Amazon S3 के चेकसम हेडर बाइनरी डाइजेस्ट का Base64 रखते हैं, न कि वह हेक्स स्ट्रिंग जोmd5sumदिखाता है। - छोटे पहचानकर्ता। एक UUID 16 बाइट का होता है: हेक्स में 32 अंक, लेकिन बिना पैडिंग वाले Base64URL में केवल 22 अक्षर।
स्वीकार किए जाने वाले हेक्स फ़ॉर्मैट
हेक्स अंक केस-संवेदी नहीं होते। डिकोड करने से पहले कन्वर्टर व्हाइटस्पेस, लाइन ब्रेक, कोलन, सेमीकोलन, कॉमा, हाइफ़न और 0x, \x, % और &#x प्रीफ़िक्स हटा देता है। इससे AB:CD:EF जैसे OpenSSL फ़िंगरप्रिंट, 0x12, 0x34 जैसे C ऐरे, \x12\x34 जैसी एस्केप की गई स्ट्रिंग, परसेंट-एनकोड किए गए बाइट और हाइफ़न वाले UUID, सभी सँभल जाते हैं।
सफ़ाई के बाद इनपुट में अंकों की संख्या सम होनी चाहिए, हर बाइट के लिए दो अंक। विषम संख्या को त्रुटि के रूप में दिखाया जाता है, और आमतौर पर इसका मतलब होता है कि शुरुआत का कोई शून्य छूट गया है, जैसे 0abc की जगह abc लिखा जाना।
हेक्स टेक्स्ट नहीं, बाइट एनकोड करें
एक आम ग़लती है हेक्स डाइजेस्ट को किसी साधारण टेक्स्ट-से-Base64 एनकोडर में पेस्ट कर देना। इससे वे बाइट एनकोड नहीं होते जिन्हें ये अंक दर्शाते हैं, बल्कि ख़ुद 0-9a-f अक्षर एनकोड हो जाते हैं, और परिणाम जितना होना चाहिए उससे दोगुना लंबा हो जाता है: SHA-256 डाइजेस्ट के लिए 44 की जगह 88 अक्षर। जो भी चीज़ बाइनरी डाइजेस्ट की अपेक्षा रखती है, जैसे SRI एट्रिब्यूट या चेकसम हेडर, वह इसे अस्वीकार कर देगी। यह कन्वर्टर पहले हेक्स को बाइट में डिकोड करता है।
# शेल: हेक्स डाइजेस्ट से Base64
printf '%s' "$HEX" | xxd -r -p | base64
# एक ही चरण में किसी फ़ाइल का SRI मान
openssl dgst -sha384 -binary script.js | openssl base64 -A
# Python
base64.b64encode(bytes.fromhex(h)).decode()
// Node.js (पहले गैर-हेक्स अक्षर पर बिना कोई त्रुटि दिए रुक जाता है)
Buffer.from(h, 'hex').toString('base64')
अक्सर पूछे जाने वाले प्रश्न
मेरी हेक्स स्ट्रिंग पर त्रुटि क्यों आती है?
या तो इनपुट में कोई ऐसा अक्षर है जो हेक्स अंक नहीं है, जैसे शून्य की जगह अंग्रेज़ी अक्षर O, या अंकों की संख्या विषम है। त्रुटि संदेश अमान्य अक्षर की स्थिति बताता है; विषम लंबाई होने पर देखें कि कहीं शुरुआत का 0 तो नहीं छूट गया।
Base64 आउटपुट कितना लंबा होगा?
= चिह्न भी शामिल है।Subresource Integrity हैश कैसे बनाएँ?
integrity="sha384-..." लिखें। OpenSSL से यह काम एक ही कमांड में हो जाता है: openssl dgst -sha384 -binary file.js | openssl base64 -A।आउटपुट मानक Base64 है या URL-सुरक्षित?
+ और / वाला मानक Base64, जैसा SRI, CSP और HTTP चेकसम हेडर के लिए ज़रूरी है। URL-सुरक्षित आउटपुट चाहिए, तो लक्ष्य एनकोडिंग के रूप में Base64URL चुनें।