2013-04-08 4 views
14

मुझे दो कार्यों/विधियों की आवश्यकता है, एक को एन्कोड करने के लिए, एक को डीकोड करने के लिए। यह पासवर्ड संग्रहित करने के लिए नहीं है। डेटा को एन्कोड करने के लिए प्रत्येक उपयोगकर्ता के पास एक विशिष्ट कुंजी/नमक होगा।उपयोग-विशिष्ट कुंजी का उपयोग कर दो तरह के एन्कोड/डीकोड विधियों को कैसे बनाएँ - PHP?

यह कैसे मैं यह काम करना चाहते हैं:

function encode($str, $key) { 
    // something fancy 
} 

function decode($str, $key) { 
    // something fancy 
} 

$key = $logged_in_user->get_key(); 
$plain = 'abc abc 123 123'; 
$encoded_data = encode($plain, $key); 
// some_fancy_encrypted_data_that_is_really_cooooool 
$decoded_data = decode($encoded_data, $key); 
// abc abc 123 123 

एक और बात है हर बार जब मैं इस सुविधा का उपयोग यह है कि यह एक ही बात हर बार जब मैं एक ही उपयोगकर्ता कुंजी के साथ encode फ़ंक्शन का उपयोग वापस जाने के लिए की जरूरत है ।

मैं यह कैसे करूँगा ??

+4

तो क्या आपने mcrypt (http://www.php.net/manual/en/mcrypt.examples.php) को देखा है? और 'हैश' टैग ड्रॉप करें, क्योंकि आप कहते हैं कि आप __don't__ को हैश –

+0

चाहते हैं मेरे पास एक [छोटी कक्षा] है (http://stackoverflow.com/questions/15034368/cannot-decrypt-openssl-encrypt-output-on -command-line) जो आपको चाहिए वह कर सकता है, लेकिन असली सवाल यह है कि आप स्वतंत्र रूप से प्रत्येक उपयोगकर्ता के डेटा को व्यक्तिगत रूप से एन्क्रिप्ट करने की आवश्यकता क्यों महसूस करते हैं। आम तौर पर यह माना जाता है कि एक बार हमला किया जाने वाला डेटा आपके संग्रहीत डेटा को देख सकता है, वे आपके स्रोत कोड को भी देख सकते हैं जो आंतरिक एन्क्रिप्शन के अधिकांश उपयोगों को अमान्य करता है, साथ ही साथ जैसा भी हो सकता है। – Sammitch

+0

@Sammitch कुछ मामलों में यह उपयोगी है अगर डेटा को एन्क्रिप्ट/डिक्रिप्ट करने के लिए उपयोग की जाने वाली कुंजी कहीं भी नहीं मिल सकती है (और केवल उपयोगकर्ता से संबंधित है)। मुझे पूरा यकीन है कि लास्टपास भी ऐसा करता है। – h2ooooooo

उत्तर

46
$myVarIWantToEncodeAndDecode 

परिभाषित कुंजी (नमक, शोरबा आदि ..): $key = "#&$sdfdfs789fs7d";

सांकेतिक शब्दों में बदलना करने के लिए:

$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $myVarIWantToEncodeAndDecode, MCRYPT_MODE_CBC, md5(md5($key)))); 

को डिकोड करने के लिए:

$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encoded), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 

नोट: mcrypt_decrypt पदावनत किया गया है PHP 7.1.0 के रूप में। इस समारोह पर निर्भर करना बेहद निराश है।

+0

हम्म .. यह काम करता प्रतीत होता है, लेकिन स्ट्रिंग को डीकोड करने से मैं जो डेटा वापस प्राप्त कर रहा हूं वह 'ए' है · fμŒ "÷ Óÿ ‰ Zvÿ" õE ¥ ‰ ¬DõØ & Hå§'। क्या गलत है? –

+0

तो यह सही डीकोड और एन्कोड करता है? आप एन्कोडिंग क्या कर रहे हैं? सादे पाठ? इनकोडिंग डेटा कुछ इस तरह दिखना चाहिए: 'VXHE0iM0bMXQecCAKYAzYZjy4gbctqLGQHYvW2cFhaE =' – rinchik

+0

http://phpfiddle.org/lite/code/zj5-ic6 – rinchik

संबंधित मुद्दे