हम्म .. मुझे लगता है कि कुछ गलत हो रहा हो सकता है जब दो मूल्यों को संयोजित किया जाता है। हैशिंग को वास्तव में एक बाइट सरणी का उपयोग करना चाहिए, एन्क्रिप्ट संस्करण की तरह , लेकिन दुर्भाग्य से CF9 का hash() फ़ंक्शन इसका समर्थन नहीं करता - केवल तार। (हालांकि खराब तरीके से प्रलेखित, यह CF11 में समर्थित है)। मुझे यकीन नहीं है कि सीएफ 9 के लिए शुद्ध सीएफ काम है या नहीं। हालांकि, इस बीच आप सीधे जावा का उपयोग कर सकते हैं:
<cfscript>
thePassword = "[email protected]";
base64Salt = "+muo6gAmjvvyy5doTdjyaA==";
// extract bytes of the salt and password
saltBytes = binaryDecode(base64Salt, "base64");
passBytes = charsetDecode(thePassword, "UTF-16LE" );
// next combine the bytes. note, the returned arrays are immutable,
// so we cannot use the standard CF tricks to merge them
ArrayUtils = createObject("java", "org.apache.commons.lang.ArrayUtils");
dataBytes = ArrayUtils.addAll( saltBytes, passBytes );
// hash binary using java
MessageDigest = createObject("java", "java.security.MessageDigest").getInstance("SHA-1");
MessageDigest.update(dataBytes);
theBase64Hash = binaryEncode(MessageDigest.digest(), "base64");
WriteOutput("<br />theBase64Hash= "& theBase64Hash &"<br/>");
WriteOutput("DBPassword= nfcqQBgeAm0Dp1oGZI0O70Y6DvA= <br />");
</cfscript>
अपडेट करें:
आगे देखने के बाद, मुझे नहीं लगता कि शुद्ध CF समाधान है। UTF-16LE एन्कोडिंग समस्या का ही एक हिस्सा है। दूसरा मुद्दा यह है कि डीएनएन प्रत्येक स्ट्रिंग को अलग से . डीकोड करता है , जो एक एकल . के रूप में दोनों को डिकोड किए जाने की तुलना में भिन्न बाइट उत्पन्न कर सकता है स्ट्रिंग (नीचे तुलना देखें)। यह आपके दूसरे पासवर्ड के मामले में करता है, यही वजह है कि अंतिम हैश अलग है। चूंकि hash
बाइट सरणियों को स्वीकार नहीं करेगा, मुझे नहीं लगता कि यह इस काम के लिए सही उपकरण है। MessageDigest
जाने का रास्ता है।
बाइट सरणी तुलना
old| new |
1 | -6 | -6 |
2 | 107 | 107 |
3 | -88 | -88 |
4 | -22 | -22 |
5 | 0 | 0 |
6 | 38 | 38 |
7 | -114 | -114 |
8 | -5 | -5 |
9 | -14 | -14 |
10 | -53 | -53 |
11 | -105 | -105 |
12 | 104 | 104 |
13 | -3 | 77 | **
14 | -1 | -40 | **
15 | 68 | -14 | **
16 | 0 | 104 | **
17 | 84 | 68 | **
18 | 0 | 0 |
19 | 33 | 84 | **
20 | 0 | 0 |
21 | 64 | 33 | **
22 | 0 | 0 |
23 | 49 | 64 | **
24 | 0 | 0 |
25 | 50 | 49 | **
26 | 0 | 0 |
27 | | 50 | **
28 | | 0 | **
- पुराना => charsetDecode(theSalt &thePassword, "UTF-16LE")
- नया => ArrayUtils.addAll (नमकबाइट्स, पासबाइट्स);