aes - Encryption Algorithm returning different value in php and javascript -
PHP में
& lt;? Php $ token = 'uid = pratik @ gmail कॉम | ts = 1412917909 | हैश = r1xWbgfHUxDLlppGYuOKQJdIM1MTrkryEArkMQx9ERw = | url = http: //myintranet.com '; $ कुंजी = 'a1cbbb6eb5cb2c1c27a9f02a4434d3af'; $ टोकन = mb_convert_encoding ($ टोकन, 'UTF-16LE'); $ BlockSize = 16; $ पैड = $ ब्लॉकसिस - (स्ट्रेलन ($ टोकन)% $ ब्लॉक आकार); $ टोकन। = Str_repeat (chr ($ पैड), $ पैड); $ टोकन = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $ कुंजी, $ टोकन, MCRYPT_MODE_CBC, $ iv); $ टोकन = बेस 64_एनोड ($ टोकन); गूंज "\ n यह टोकन $ टोकन है \ n"; ? & Gt; आउटपुट -:
यह टोकन है TXz3UEgAdjGhyriNGcMJBUk4QcW3dA7rttzjbKztw19X8bSIMDZt8s6uSQy2OP5QcSpJuReKv73wFXzPyCXt05CNY6XWlx9Lfrv6Nosj0 + 4mHdD7 / Wvx0QWqxuuv5qv4sgtgSif59Wy / ZAoYhfH8yzN / 3hWnx6zzOrV6jxyDttmffk1zcBwtJ3X41mMVbPLOd1 / 2K3ZYxCcJ1VxESFDNB4N1okvGMRkCM0tL77oZiKv + n6CP9FEgKivCfvytFB8JWc9K ++ 8vbLdV / iGgkEa7h0pfAZtYpryQQjFzqLx8NSQ = जावास्क्रिप्ट में
'सख्त प्रयोग'; Var क्रिप्टोजएस = की आवश्यकता होती है ("क्रिप्टो-जेएस"); String.prototype.repeat = function (num) {नए अर्रे (num + 1) लौटें। (इस); } फ़ंक्शन encodeUTF16LE (str) {var बाहर, i, len, c; Var char2, char3; बाहर = ""; Len = str.length; मैं = 0; जबकि (i & lt; len) {c = str.charCodeAt (i ++); स्विच (सी एंड जी; & gt; 4) {मामला: मामला 1: मामला 2: मामला 3: मामला 4: मामला 5: केस 6: मामला 7: // 0xxxxxxx बाहर + = str.charAt (i-1); टूटना; केस 12: केस 13: // 110x xxxx 10xx xxxx char2 = str.charCodeAt (i ++); बाहर + = स्ट्रिंग.प्रकाशकारोड (((और amp; 0x1F) & lt; & lt; 6) | (चार 2 और amp; 0x3F)); बाहर + = str.charAt (i-1); टूटना; केस 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charCodeAt (i ++); Char3 = str.charCodeAt (i ++); बाहर + = स्ट्रिंग.फ्रेमकारोड (((और amp; 0x0F) & lt; & lt; 12) | ((चार 2 और 0x3 एफ) & lt; & lt; 6) | ((चार 3 और 0x3F) & lt; & lt; 0)); टूटना; }} Var बाइटअरे = नया Uint8Array (out.length * 2); के लिए (var i = 0; i & lt; out.length; i ++) {बाइटअरे [i * 2] = बाहर.चारकोडअट (i); // एंड amp; 0xff; बाइटअरे [i * 2 + 1] = आउट.चारकोडअट (आई)> & gt; 8; // एंड amp; 0xff; } वापसी String.fromCharCode.apply (स्ट्रिंग, बाइटअरे); } Var टोकन = 'uid=pratik@gmail.com | ts = 1412917909 | हैश = आर 1xWbgfHUxDLlppGYuOKQJdIM1MTrkryEArkMQx9ERw = | यूआरएल = http: //myintranet.com'; Var key = 'a1cbbb6eb5cb2c1c27a9f02a4434d3af'; Var blockSize = 16; टोकन = एन्कोड्यूट एफ 16LE (टोकन); Var pad = blockSize - (token.length% blockSize); टोकन = टोकन + (स्ट्रिंग.प्रकाशकैशोड (पैड))। दोहराएँ (पैड); टोकन = क्रिप्टोजएस.एएस.एन्सी्रिप्ट (टोकन, कुंजी, {iv: iv, मोड: क्रिप्टोजएस.मोड.सीबीसी}); Console.log ("\ n यह टोकन है" + टोकन + "\ n"); टोकन = token.ciphertext.toString (CryptoJS.enc.Base64); Console.log ("\ n यह टोकन है" + टोकन + "\ n"); आउटपुट
यह वह जगह है टोकन U2FsdGVkX19iQjVHkx / vmhljCsRyTBUA0QFJ8I + pPvxAa2dK6iO4r9FUw2Um2j0H + iyXZ / G0UO0fhJTFzfJEfS1cMfAaq0Z7UBUpVhtrH5IArr2F3BI6yWC8Kpo4ZimyW + xnWp0BYUpLUNQTLsFooiIqPHv3s9HHMe3k0altm6ou1pAKaIr8IAY1OzIDTbaRO55mPf0rU6Z2XTLGR6kYoAx9Lk4dZ3RA66cynXWFMuHznL0fik3phZ8cUiKd / Twquil97YHT + सीबी / 1ulxEBD17VQvnsCJI1lYNn9dyWAUG96KMgGk3jFxiW9eRzV5Poywnt0QNaRpmZiG41KNFmtMtw == यह टोकन GWMKxHJMFQDRAUnwj6k है + / EBrZ0rqI7iv0VTDZSbaPQf6LJdn8bRQ7R + ElMXN8kR9LVwx8BqrRntQFSlWG2sfkgCuvYXcEjrJYLwqmjhmKbJb7GdanQFhSktQ1BMuwWiiIio8e / ez0ccx7eTRqW2bqi7WkApoivwgBjU7MgNNtpE7nmY9 / StTpnZdMsZHqRigDH0uTh1ndEDrpzKddYUy4fOcvR + KTemFnxxSIp39PCq6KX3tgdP4IH / W6XEQEPXtVC + ewIkjWVg2f13JYBQb3ooyAaTeMXGJb15HNXk + jLCe3RA1pGmZmIbjUo0Wa0y3 मुझे लगता है कि समस्या CryptoJS.AES.encrypt जहां मैं इसे सही विन्यास गुजर नहीं कर रहा हूँ है?
वास्तव में इस पर फंस गया है, इसलिए यदि आपके पास कोई सुझाव है, तो मैं जानना चाहता हूं।
< पी> दोनों में जिन मामलों में आपकी अपेक्षा की जाती है, उनकी चाबी का इलाज नहीं किया जाता है। 'a1cbbb6eb5cb2c1c27a9f02a4434d3af' एक 16 बाइट (= 128 बिट) की हेक्स प्रतिनिधित्व है, जो कि एईएस 128 के लिए इस्तेमाल किया जा सकता है। mcrypt इसे हेक्स प्रतिनिधित्व प्राप्त नहीं कर रहा है और इसे 32 बाइट स्ट्रिंग मानता है और IIRC - इसके पहले 16 बाइट्स ('a1cbbb6eb5cb2c1c') को छोड़कर सब कुछ फेंकता है। आपको कच्चे बाइट प्राप्त करने के लिए कुंजी को अनियमित करने की आवश्यकता है:। क्रिप्टोजएस को यह भी नहीं पता है कि यह कुंजी के एक हेक्स प्रतिनिधित्व प्रस्तुत किया है और। पुस्तकालय में इसकी है: var key = CryptoJS.enc.Hex.parse ('a1cbbb6eb5cb2c1c27a9f02a4434d3af'); जिसके परिणामस्वरूप WordArray को क्रिप्टोजएस द्वारा बाइनरी कुंजी इनपुट के रूप में माना जाएगा।
Comments
Post a Comment