2013-02-22 69 views
5

मैंने लॉगिन फॉर्म बनाया जहां उपयोगकर्ता अपना उपयोगकर्ता नाम और पासवर्ड सबमिट करता है। यदि उपयोगकर्ता नाम मौजूद है तो मैं पासवर्ड डीकोड करता हूं और सबमिट करता हूं कि सबमिट किए गए पासवर्ड के समान ही है या नहीं।कोडनिर्देशक एन्क्रिप्टेड पासवर्ड को डीकोड नहीं कर सकता

// यह

string(50) "v+bNPHNWHGQbcxrvu1vN8Ty++cMq0oEeaZesvfCfsLgNAFgZno" 

// डाटाबेस से है और यह डिकोड करने के बाद ऊपर

string(32) "�� U�U{q�0�4��è€UC��o�/�*�." 

स्ट्रिंग है लेकिन यह वापस आ जाएगी

एनकोड के लिए मैं

का उपयोग
$this->encrypt->encode('123456'); 

और यह गुप्त कुंजी

$config['encryption_key'] = 'kRlaMneym7rF'; 

// संपादित

समस्या यह है कि गया था पासवर्ड फ़ील्ड 50

+3

आपको अपने पासवर्ड एन्क्रिप्ट नहीं करना चाहिए लेकिन उन्हें हैश करना चाहिए।फिर जब कोई उपयोगकर्ता लॉगिन करने का प्रयास करता है, तो आपने मूल्य में भेजा है और इसे डेटाबेस में हैश के साथ जांचें। इसके लिए कुछ और है (लवण, आदि), लेकिन यह मूल रूप से यह है। – jeroen

+0

आप डेटा को कैसे डिक्रिप्ट करते हैं? – Repox

+0

$ यह-> एन्क्रिप्ट-> डीकोड ('v + bNPHNWHGQbcxrvu1vN8Ty ++ cMq0oEeaZesvfCfsLgNAFgZno'); – Ben

उत्तर

4

config

$config['charset'] = 'UTF-8'; 

अपने डेटाबेस की चारसेट बनाम में अपने CodeIgniter चारसेट की जांच करें। आपका संघर्ष शायद वहां से आ रहा है।

कोडिग्निटर को जांचने और देखने के लिए कि क्या यह सही परिणाम देता है या नहीं। कड़ी-कोडिंग की कोशिश करें जैसे पहले या कॉपी करें और इसे अपने कंट्रोलर में जांचें।

function testencrypting(){ 
    $str = '12345'; 
    $key = 'my-secret-key'; 
    $encrypted = $this->encrypt->encode($str, $key); 
    echo $this->encrypt->decode($encrypted, $key); 
    exit; 

}

मेरा अपेक्षित परिणाम का उत्पादन: 12345 हैं कि, काम करता है तो आपकी समस्या को संभवतः कैरेक्टर सेट (CHARSET) है। मैं यहाँ एक एन्क्रिप्शन कुंजी का उपयोग कर रहा हूँ। आप एन्कोड और डीकोड में दूसरे पैरामीटर को छोड़कर कॉन्फ़िगरेशन में डिफ़ॉल्ट का उपयोग कर सकते हैं।

मुझे बताएं कि क्या

3

आप हैश करने के लिए, बल्कि एन्क्रिप्ट से चाहते VARCHAR लिए सेट किया गया है, और आप यह कर सकते हैं कोडइग्निटर की एन्क्रिप्ट लाइब्रेरी के साथ जो हैशिंग के लिए SHA1 का उपयोग करता है।

$password = $this->encrypt->sha1('123456'); 

यह 7c4a8d09ca3762af61e59520943dc26494f8941b वापसी होगी, वह राशि है जो डेटाबेस में संग्रहीत किया जाएगा।

आप un हैश पासवर्ड नहीं कर सकते हैं - आप डेटाबेस में हैश के खिलाफ हैश किए गए इनपुट को देखना चाहते हैं।

2

आप की कोशिश की है:

$this->encrypt->decode($string); 
0

आईव ने इसे समझ लिया। मैंने पाया कि ऐसा इसलिए था क्योंकि जिस तालिका में मैं पासवर्ड यूनिकोड स्टोर करने के लिए उपयोग कर रहा था वह लैटिन 1 था। मैंने उपयोगकर्ता तालिका फ़ील्ड पासवर्ड को यूटीएफ -8 के रूप में बदल दिया, जो इस समस्या को ठीक करने के लिए प्रतीत होता है

2

एक संभावित कारण आपके डेटाबेस में उस क्षेत्र की लंबाई हो सकता है, जो मेरा मामला था। मेरे पास एक क्षेत्र बहुत छोटा था।