कोल्डफ्यूजन 3DES एन्क्रिप्ट एन्क्रिप्टेड परिणाम PHP `mcrypt_encrypt` से भिन्न बनाते हैं



encryption coldfusion (1)

सबसे पहले, कोल्डफ्यूजन एन्क्रिप्ट:

<cfset message = '1447841550'>
<cfset key = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev'>

<cfset ciphertext = Encrypt(#message#, #key#, "desede", "base64")>
<cfoutput>#ciphertext#</cfoutput>

फिर, PHP mcrypt:

$message = "1447841550";
$key = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev';

$key = base64_decode($key);

$bytes = array(0,0,0,0,0,0,0,0); //byte [] IV = {0, 0, 0, 0, 0, 0, 0, 0}
$iv = implode(array_map("chr", $bytes));

$ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);

echo base64_encode($ciphertext);

मुसीबत।

एक ही स्ट्रिंग में, एक ही एल्गोरिथ्म और एक ही एन्कोडिंग

अभी भी आउटपुट का एक छोटा हिस्सा है जो मैच नहीं है।

नीचे वास्तविक नमूना आउटपुट है

// Coldfusion output.

n6lp0I1w5FwrP3yPw3s8bw== 

^^^^^^^^^^

Same part


// PHP output.

n6lp0I1w5FxLQHskKMn4sw==

^^^^^^^^^^

Same part

कोल्डफ्यूजन के परिणाम अलग क्यों होते हैं?

मैं कैंडिफ्यूज़ में ऐसे ही परिणाम कैसे बना सकता हूं जो कि PHP कोड को संशोधित नहीं करता। PHP आउटपुट मेरे लिए सही आउटपुट है

क्या जावास्क्रिप्ट के साथ सही परिणाम (पीएचपी) प्राप्त करना संभव है? यह समाधान भी अच्छा है।

मैं निराश हूँ।

अग्रिम धन्यवाद


सेटिंग्स बंद हैं, लेकिन ठीक उसी तरह नहीं। इसका कारण अलग-अलग कारण है:

  1. "सीबीसी" मोड में एक IV (प्रारंभिक सदिश) की आवश्यकता होती है। PHP कोड स्पष्ट रूप से एक चतुर्थ आपूर्ति करता है, लेकिन सीएफ़ कोड नहीं करता है। इसलिए encrypt() फ़ंक्शन एक IV अनियमित रूप से उत्पन्न करता है इसलिए परिणाम क्यों न मिलते हैं: अलग-अलग IV, अलग-अलग परिणाम

  2. जब आप "नो पैडिंग" मोड का उपयोग करते हैं, तो इनपुट स्ट्रिंग को गद्देदार होना चाहिए ताकि इसकी लंबाई ब्लॉक आकार के एकमात्र भी हो (अर्थात् DESEDE => 8)। मैं जो समझता हूं, "... PHP का mcrypt एक्सटेंशन केवल शून्यपैडिंग का उपयोग करता है" CF encrypt() फ़ंक्शन शून्य पैडिंग का समर्थन नहीं करता है। हालांकि, आप इस उदफ नलपैड () की तरह कुछ का उपयोग करके इसे अनुकरण कर सकते हैं

एक बार आपने उन दो (2) परिवर्तनों को शामिल कर लिया है, तो परिणाम मैच होंगे:

परिणाम:

n6lp0I1w5FxLQHskKMn4sw== 

उदाहरण:

<cfset message = nullPad("1447841550", 8)>
<cfset key = "Mk9m98IfEblmPfrpsawt7BmxObt98Jev">
<!--- Important: IV values should be random, and NOT reused --->
<!--- https://en.wikipedia.org/wiki/Initialization_vector --->
<cfset iv = binaryDecode("0000000000000000", "hex")>
<cfset ciphertext = Encrypt(message, key, "DESede/CBC/NoPadding", "base64", iv)>
<cfoutput>#ciphertext#</cfoutput>




mcrypt