2012-05-16 15 views
6

मैं विशाल समस्याओं एक mysql डेटाबेस में एन्क्रिप्टेड जानकारी, इंजन mySam भंडारण आ रहीडाटाबेस क्षेत्र में encrpted जानकारी स्टोर करने के लिए

मैं इस तरह की जानकारी को एनक्रिप्ट संघर्ष:

function in($plaintext) { 
$cipher = 'rijndael-256'; 
$mode = 'cbc'; 
$key = 'key'; 

    $td = mcrypt_module_open($cipher, '', $mode, ''); 
    $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
    mcrypt_generic_init($td, $key, $iv); 
    $crypttext = mcrypt_generic($td, $plaintext); 
    mcrypt_generic_deinit($td); 
    return $iv.$crypttext; 
} 

डेटा तो संग्रहीत किया जाता है एक ब्लॉब में जब मैं जानकारी को डराने के लिए आता हूं तो ऐसा लगता है कि डेटाबेस में स्टोरेज के कारण लगभग 10% भ्रष्ट हो गया है।

मैं इसे सत्यापित कर सकता हूं कि डेटाबेस समस्या है क्योंकि मैंने बड़े पैमाने पर एन्क्रिप्ट करने के लिए स्क्रिप्ट चलाई हैं और बिना किसी समस्या के डेटा को डिक्रिप्ट किया है।

कोई भी विचार? अग्रिम धन्यवाद ...

[संपादित करें डिक्रिप्शन दिनचर्या]

function decrypt($crypttext) 
{ 
$cipher = 'rijndael-256'; 
$mode = 'cbc'; 
$key = '$key'; 

    $plaintext = ''; 
    $td  = mcrypt_module_open($cipher, '', $mode, ''); 
    $ivsize = mcrypt_enc_get_iv_size($td); 
    $iv  = substr($crypttext, 0, $ivsize); 
    $crypttext = substr($crypttext, $ivsize); 
    if ($iv) 
    { 
     mcrypt_generic_init($td, $key, $iv); 
     $plaintext = mdecrypt_generic($td, $crypttext); 
    } 
    return $plaintext; 
} 

उत्तर

2

मैं अत्यधिक संदेह आप एक mysql डेटाबेस बग का सामना करना पड़ा ... "भ्रष्ट" कैसे? क्या हम आपकी डिक्रिप्शन रूटीन और टेस्ट स्क्रिप्ट देख सकते हैं? यह सिर्फ आपके द्वारा चलाए गए ब्लॉक-आकार पैडिंग नहीं है?

पैडिंग: क्रिप्ट अल्गोस आम तौर पर डेटा के ब्लॉक (128 बिट्स का उपयोग करते हुए एएस) पर काम करते हैं - इनपुट (और इस प्रकार आउटपुट!) डेटा इस लंबाई तक गद्देदार होगा, और आपको पूरे पैड आउटपुट स्ट्रिंग को स्टोर करने की आवश्यकता है - और संभवतः यदि आपके इनपुट डेटा पीएफ एक फॉर्म है, तो पैडिंग निर्धारित नहीं किया जा सकता है & डिक्रिप्शन के बाद स्वचालित रूप से हटा दिया गया है।

+0

मुझे यह भी संदेह है कि यह एक बग है। दूषित होने का मतलब है कि जब मैं डिक्रिप्टेड फ़ील्ड को देखता हूं तो वे अर्थहीन पात्रों की एक स्ट्रिंग हैं। क्या आप ब्लॉक-आकार पैडिंग याचिका पर विस्तारित करेंगे? – rix

+0

हमें आपके डिक्रिप्ट दिनचर्या को देखने की आवश्यकता होगी, साथ ही डेटाबेस में डेटा को संग्रहीत करने के बारे में कुछ और जानकारी - एक पूर्ण प्रजनन स्क्रिप्ट अच्छी होगी। – snemarch

0

MySQL में सादे टेक्स्ट पासवर्ड सुरक्षित करना एक अच्छा विचार नहीं है ... क्यों SHA1, या MD5 हैश का उपयोग नहीं करें ... आपको अधिक consice प्रतिक्रियाएं मिलेंगी, फिर आप फिट बैठे हुए अहंकार को बदल दें।

मूल रूप से

चयन SHA1 ("SecretPassword") होगा = 08cd923367890009657eab812753379bdb321eeb या blabityboo

SHA1 40 characterse, तो आप शायद VARCHAR को ब्लॉब से अपने डेटा प्रकार बदलना चाहिए जिसका मतलब है, या nvarchar को स्टोर करेगा() < --- शायद varchar ...

आपके एल्गोरिदम के निर्माण के बिना हम यह नहीं बता सकते कि क्षेत्र कितना समय होगा, इसलिए पैडिंग के बारे में टिप्पणी।

जब आप SELECT CHARACTER_LENGTH ("SecretPassword") का उपयोग करके पास का चयन करते हैं तो आपको एन्क्रिप्टेड फ़ील्ड की लंबाई मिल जाएगी। और फिर आप उचित बाधाएं बना सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

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