के बाद से Mcrypt हटाई गई है, मैं के बाद से हम पहले से ही php 7.0.17 हमारे सर्वर में उपयोग करने के बजाय मेरी कोड में OpenSSL का उपयोग करना चाहते हैं और वहाँ कोई बताती हैं कि यह उन्नयन है ।mcrypt क्रिप्ट -128 OpenSSL को एईएस 128-ईसीबी रूपांतरण
कुछ तीसरे पक्ष एपीआई (पीएचपी 5.x शायद और mcrypt के प्रयोग पर आयोजित), एन्क्रिप्टेड डाटा ले जा रहा है। उन्होंने विधियों को एन्क्रिप्ट/डिक्रिप्ट करने के लिए उपयोग की जाने वाली विधियां प्रदान की हैं।
यहाँ वे
$secret = 'a0a7e7997b6d5fcd55f4b5c32611b87c' ;
public function encrypt128($str)
{
$block = mcrypt_get_block_size("rijndael_128", "ecb");
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret, $str, MCRYPT_MODE_ECB));
}
public function decrypt128($str)
{
$str = base64_decode($str);
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $secret, $str, MCRYPT_MODE_ECB);
$len = strlen($str);
$pad = ord($str[$len - 1]);
return substr($str, 0, strlen($str) - $pad);
}
इन तरीकों स्ट्रिंग small1
का उपयोग कर यदि एन्क्रिप्टेड हो जाता है v7IXp5vVaFVXXlt/MN8BVw==
हम अपने पक्ष में openssl_encrypt
उपयोग करने के लिए इस तरह के हैं कि अगर हम OpenSSL के साथ एक ही स्ट्रिंग एन्क्रिप्ट यह देना चाहिए चाहते हैं मैक्रिप्ट के समान परिणाम। मैंने शोध किया है कि का उपयोग करके mcrypt rijndael-128 मोड ecb ओपनएसएसएल aes-128-ecb
के साथ संगत होना चाहिए।
पिछले कुछ घंटों के लिए, मैं OpenSSL का उपयोग कर उसी परिणाम की सेवा करने वाले तारों को एन्क्रिप्ट करने के लिए अपनी स्वयं की विधि बनाने की कोशिश कर रहा हूं। अब तक मैं इस
public function sslEncrypt128($str)
{
$secret = 'a0a7e7997b6d5fcd55f4b5c32611b87c';
return base64_encode(openssl_encrypt($str, 'aes-128-ecb', $secret, OPENSSL_RAW_DATA));
}
पर आए हैं लेकिन यह इनपुट से ऊपर के रूप में ही अलग-अलग स्ट्रिंग SxJ3+EdaeItZx3/EwGTUbw==
पैदा करता है। मुझे नहीं पता कि यह ध्वज की समस्या है या पैडिंग है, किसी भी पॉइंटर्स का स्वागत होगा।
मैं ऑनलाइन अग्रिम में https://3v4l.org/v2J2N
धन्यवाद परीक्षण करने के लिए यहाँ कोड जोड़ दिया है।
ईसीबी मोड में कुछ गंभीर सुरक्षा समस्याएं हैं। ** बहुत ** सुनिश्चित करें कि यह आपके विशिष्ट एप्लिकेशन के लिए उपयुक्त है। आम तौर पर सीबीसी मोड या सीटीआर मोड अधिक सुरक्षित होगा। समस्या के एक उदाहरण (शाब्दिक) के लिए [इलेक्ट्रॉनिक कोडबुक] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.290) देखें। – rossum
यह भी देखें [मैक्रिप्ट से ओपनएसएसएल तक मेरी एन्क्रिप्शन लाइब्रेरी को अपग्रेड करना] (http://stackoverflow.com/q/43329513/608639), [ओपनएसएसएल के साथ मैक्रिप्ट को बदलें] (http://stackoverflow.com/q/9993909/608639) और [PHP 7.2 में मैक्रिप्ट को हटाने के लिए तैयारी कर रहा है] (http://stackoverflow.com/q/42696657/608639), [3DES-ECB एन्क्रिप्शन के लिए मैक्रिप्ट को प्रतिस्थापित करने के लिए openssl_encrypt का उपयोग करें] (https://stackoverflow.com/q/ 3 9467008/608639) (यह ईसीएम मोड का उपयोग करता है)। – jww
नोट: बेस 64 डेटा कंप्यूटर के लिए ठीक है लेकिन डेवलपर्स के लिए डेटा से कुछ भी समझने के लिए प्रति-बाइट प्रतिनिधित्व की आवश्यकता है, हेक्स उस आवश्यकता को पूरा करता है, बेस 64 नहीं करता है। – zaph