मुझे ओरेकल डेटाबेस और एक MySQL डेटाबेस के बीच डेटा की तुलना करने की आवश्यकता है।ओरेकल और MySQL में एईएस एन्क्रिप्शन अलग-अलग परिणाम दे रहे हैं
ओरेकल में, डेटा को पहले AES-128
एल्गोरिदम के साथ एन्क्रिप्ट किया गया है, और फिर धोया गया है। जिसका अर्थ है कि डेटा को पुनर्प्राप्त करना और इसे डिक्रिप्ट करना संभव नहीं है।
वही डेटा MySQL में और सादा पाठ में उपलब्ध है। तो डेटा की तुलना करने के लिए, मैंने ओरेकल में किए गए चरणों का पालन करते समय एन्क्रिप्टिंग करने और फिर MySQL डेटा को हश करने की कोशिश की।
बहुत सारी कोशिशों के बाद, मुझे अंत में पता चला कि MySQL में aes_encrypt
ओरेकल में से एक के मुकाबले अलग-अलग परिणाम देता है।
-- ORACLE:
-- First the key is hashed with md5 to make it a 128bit key:
raw_key := DBMS_CRYPTO.Hash (UTL_I18N.STRING_TO_RAW ('test_key', 'AL32UTF8'), DBMS_CRYPTO.HASH_MD5);
-- Initialize the encrypted result
encryption_type:= DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
-- Then the data is being encrypted with AES:
encrypted_result := DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW('test-data', 'AL32UTF8'), encryption_type, raw_key);
ओरेकल कोड के लिए परिणाम होगा: 8FCA326C25C8908446D28884394F2E22
-- MySQL
-- While doing the same with MySQL, I have tried the following:
SELECT hex(aes_encrypt('test-data', MD5('test_key'));
MySQL कोड के लिए परिणाम होगा: DC7ACAC07F04BBE0ECEC6B6934CF79FE
मैं कुछ याद आ रही है? या अलग-अलग भाषाओं के बीच एन्क्रिप्शन विधियां समान नहीं हैं?
अद्यतन: नीचे टिप्पणी के अनुसार, मेरा मानना है कि मैं इस तथ्य है कि Oracle में DBMS_CRYPTO.Hash
का परिणाम MySQL में MD5
समारोह से लौट आए परिणाम के रूप में एक ही है उल्लेख करना चाहिए। हैं: के बाद से चतुर्थ कार्य करने के लिए पारित किया जा रहा है, इस प्रकार चतुर्थ के डिफ़ॉल्ट मान NULL
इनाम प्रयोग किया जाता है
इसके अलावा CBC
या Oracle में CBE
का उपयोग कर, एक ही परिणाम देता है किसी ने मेरी अंतिम टिप्पणी है, और तथ्य यह है कि अगर दोनों पक्षों पर एक ही गद्दी का उपयोग कर, एक ही परिणाम हो जाता है इनाम निकलेगा सत्यापित कर सकते हैं:
@rossum MySQL में डिफ़ॉल्ट गद्दी PKCS7, mmm है ... ओह .. ओरेकल में यह पीके का उपयोग कर रहा है सीएस 5, विश्वास नहीं कर सकता मैंने इसे नोटिस नहीं किया। धन्यवाद। (Btw ओरेकल PAD_PKCS7 विकल्प नहीं है, नहीं 11g में कम से कम)
पहली नज़र में मुझे समस्या होने पर संदेह है: 'test_key', 'AL32UTF8' 'मेथिंक MySQL के पास आपके डेटा पर एक अलग वर्णमाला है और इस प्रकार एन्क्रिप्शन लागू होने से पहले अलग-अलग डेटा है। – Johan
मुझे संदेह है कि एन्क्रिप्शन एक जैसा होना चाहिए, इसलिए मैं सुनिश्चित करता हूं कि चाबियाँ समान हों। यानी एमडी 5 हेक्स स्ट्रिंग या कच्चे बाइट्स लौटाता है। यदि हेक्स, मामले के बारे में क्या? दुर्भाग्य से मेरे पास OBcle तक DBMS_CRYPTO इंस्टॉल नहीं है। – Sodved
@ कोडेड हां एमडी 5 हैशिंग उन दोनों डेटाबेसों में एक ही परिणाम दे रहा है जो '8C32D1183251DF9828F929B935AE0419' है। और चूंकि यह मामला @ जोहान है, इसलिए यह एन्कोडिंग समस्या नहीं होनी चाहिए क्योंकि एमडी 5 हैशिंग एक ही – Dan