AES डिक्रिप्शन टूल
AES-128/192/256 सिफ़रटेक्स्ट डिक्रिप्ट करें: OpenSSL `Salted__` (U2FsdGVkX1…) डेटा, CryptoJS आउटपुट या CBC, GCM, CTR, CFB, OFB, ECB में रॉ hex की + IV।
आउटपुट Base64 में OpenSSL "Salted__" फ़ॉर्मेट में है: 8 बाइट का रैंडम सॉल्ट और उसके बाद सिफ़रटेक्स्ट। की और IV पासफ़्रेज़ व सॉल्ट से बनते हैं, इसलिए एक ही टेक्स्ट हर बार अलग परिणाम देता है। समकक्ष कमांड:
openssl enc -aes-256-cbc -d -md md5 -a -A -k '…'पूरी तरह आपके ब्राउज़र में चलता है। आपका डेटा कभी अपलोड नहीं होता।
AES डिक्रिप्शन क्या है?
ब्राउज़र में AES सिफ़रटेक्स्ट डिक्रिप्ट करता है। यह openssl enc और CryptoJS.AES.encrypt(text, passphrase) से बने OpenSSL Salted__ फ़ॉर्मेट (U2FsdGVkX1 से शुरू होने वाली Base64 स्ट्रिंग) को पढ़ता है, या CBC, CFB, CTR, OFB, ECB अथवा प्रमाणित GCM मोड में hex की और IV के साथ रॉ सिफ़रटेक्स्ट को। पैडिंग जाँची जाती है, इसलिए गलत की पर बेकार डेटा लौटाने की बजाय त्रुटि बताई जाती है।
AES डिक्रिप्शन का उपयोग कैसे करें
- एन्क्रिप्शन में जो की का स्रोत इस्तेमाल हुआ था वही चुनें:
U2FsdGVkX1…(Salted__) डेटा के लिए पासफ़्रेज़ (OpenSSL-संगत), या रॉ सिफ़रटेक्स्ट के लिए रॉ की + IV (hex)। - पासफ़्रेज़ (और वही की व्युत्पत्ति) या hex की और IV दर्ज करें।
- भेजने वाले जैसा ही मोड और पैडिंग सेट करें और सिफ़रटेक्स्ट (Base64 या Hex) पेस्ट करें।
- डिक्रिप्ट करें पर क्लिक करें। आउटपुट टेक्स्ट (UTF-8) में रहने दें, या प्लेनटेक्स्ट बाइनरी हो तो Hex चुनें।
उदाहरण
U2FsdGVkX19HHh9Vv809WnL0M8IWPgnpihePLw8JpDQ= (passphrase "secret", AES-256, CBC, EVP_BytesToKey MD5)
Hello, World!
openssl enc -aes-256-cbc -md md5 -a -k secret से बना सिफ़रटेक्स्ट।
AES डिक्रिप्शन का उपयोग कब करें
इसका इस्तेमाल OpenSSL या CryptoJS से एन्क्रिप्ट किया डेटा पढ़ने, यह डिबग करने कि आपका एप्लिकेशन कुछ डिक्रिप्ट क्यों नहीं कर पा रहा, या टेस्ट वेक्टर जाँचने के लिए करें। सही पासफ़्रेज़ या की ज़रूरी है – यह खोई हुई की वापस नहीं ला सकता और न AES तोड़ सकता है। अगर सिफ़रटेक्स्ट किसी दूसरे प्रोडक्ट (ZIP, डेटाबेस, पासवर्ड मैनेजर) का है तो उसका अपना कंटेनर फ़ॉर्मेट होता है और वह यहाँ डिक्रिप्ट नहीं होगा।
AES डिक्रिप्शन कैसे काम करता है
पासफ़्रेज़ वाले डेटा में पहले 16 बाइट Salted__ और 8 बाइट का सॉल्ट होने चाहिए। की और IV को पासफ़्रेज़ और सॉल्ट से EVP_BytesToKey (MD5) या आपके इटरेशन के साथ PBKDF2-HMAC-SHA256 से दोबारा निकाला जाता है, ठीक वैसे जैसे openssl enc -d करता है, फिर बाकी हिस्सा डिक्रिप्ट होता है। रॉ की में hex की और IV सीधे इस्तेमाल होते हैं। CBC/ECB डिक्रिप्शन के बाद PKCS#7 पैडिंग बाइट-दर-बाइट जाँची जाती है – मेल न खाने का मतलब लगभग हमेशा गलत की, IV, मोड या की साइज़ होता है। GCM में अंत का 16 बाइट का टैग Web Crypto प्लेनटेक्स्ट दिखाने से पहले सत्यापित करता है।
सामान्य उपयोग मामले
-
openssl enc -aes-256-cbc -aकीU2FsdGVkX1…स्ट्रिंग डिक्रिप्ट करना - वेब ऐप में
CryptoJS.AES.encryptसे एन्क्रिप्ट की गई वैल्यू जाँचना - बैकएंड के बनाए AES-GCM सिफ़रटेक्स्ट + टैग को सत्यापित करना
- संभावित सेटिंग आज़माकर पता लगाना कि कौन सी की साइज़ या मोड इस्तेमाल हुआ
- API या इंटीग्रेशन डिबगिंग के दौरान टेस्ट डेटा डिक्रिप्ट करना
सुरक्षा नोट
डिक्रिप्शन स्थानीय रूप से होता है; पासफ़्रेज़ और प्लेनटेक्स्ट आपके डिवाइस से बाहर नहीं जाते। सिर्फ़ GCM यह साबित करता है कि डेटा में बदलाव नहीं हुआ।
अक्सर पूछे जाने वाले प्रश्न
“Invalid padding” या “wrong passphrase” का क्या मतलब है?
डिक्रिप्ट हुआ आख़िरी ब्लॉक वैध PKCS#7 पैडिंग पर ख़त्म नहीं हुआ। पासफ़्रेज़, की साइज़ (128/192/256), मोड और की व्युत्पत्ति (MD5 बनाम PBKDF2 और उसके इटरेशन) जाँचें। OpenSSL 1.1+ बिना -pbkdf2 के डिफ़ॉल्ट रूप से -md sha256 लेता है, जो यहाँ समर्थित नहीं है – -md md5 या -pbkdf2 के साथ दोबारा एन्क्रिप्ट करें।
क्या यह CryptoJS का आउटपुट डिक्रिप्ट कर सकता है?
हाँ। CryptoJS.AES.encrypt(text, "passphrase").toString() वही Salted__ फ़ॉर्मेट AES-256-CBC और EVP_BytesToKey/MD5 के साथ इस्तेमाल करता है, जो यहाँ का डिफ़ॉल्ट सेटिंग है।
मेरा सिफ़रटेक्स्ट U2FsdGVkX1 से शुरू नहीं होता। अब क्या करूँ?
तब इसे रॉ की से एन्क्रिप्ट किया गया है। की का स्रोत को रॉ की + IV (hex) पर बदलें और प्रोग्राम में इस्तेमाल हुई की व IV दर्ज करें। कुछ प्रोग्राम IV को सिफ़रटेक्स्ट के आगे जोड़ देते हैं; उसे अलग करके IV फ़ील्ड में डालें।
डिक्रिप्शन का आउटपुट बेतरतीब अक्षरों जैसा क्यों दिखता है?
स्ट्रीम मोड (CTR, CFB, OFB) में जाँचने के लिए पैडिंग नहीं होती, इसलिए गलत की बेतरतीब बाइट बनाती है। टूल उन्हें अमान्य UTF-8 बताता है; बाइनरी डेटा की उम्मीद हो तो आउटपुट को Hex करें।