2009-04-30 13 views
7

ऐसा लगता है कि php में फ़ाइल को एन्क्रिप्ट करने का कोई सुखद तरीका नहीं है।PHP फ़ाइल एन्क्रिप्शन विधियों। क्या कुछ सरल है?

php, mcrypt के अंतर्निहित तरीके बहुत पोर्टेबल नहीं हैं क्योंकि अधिकांश सर्वर उनका समर्थन नहीं करते हैं।

कमांड लाइन एन्क्रिप्शन उपकरण बदसूरत हैक्स की तरह हैं।

स्ट्रिंग्स के लिए एन्क्रिप्शन अच्छा है, लेकिन अगर हम फ़ाइल को एन्क्रिप्ट करना चाहते हैं तो यह विशेष रूप से किसी और के लिए इसे अनएन्क्रिप्ट करने में मदद नहीं करता है।

अन्य एन्क्रिप्शन उपकरणों को सार्वजनिक कुंजी, कुंजी के छल्ले, निजी कुंजी, रक्त नमूना की आवश्यकता होती है ... ये फ़ाइल को एन्क्रिप्ट करने के लिए बहुत जटिल लगते हैं।

ऐसा लगता है कि हम सिर्फ PHP के लिए एक सरल समारोह कि इतने की तरह काम कर सकता था होना चाहिए:

$crypt = new Crypt(); 
$crypt->encryptFile("Password1245!", 'secret_file.txt', 'encrypted_file.txt'); 
$crypt->decryptFile("Password1245!", 'encrypted_file.txt', 'original_file.txt'); 

कोई एक किसी भी विचार है? मैं बाल खींच रहा हूँ!

संपादित करें: एक और चीज़ जो मुझे जोड़नी चाहिए, अंत उपयोगकर्ता को आसानी से फ़ाइल को डिक्रिप्ट करने में सक्षम होना चाहिए।

असल में मैं कुछ है कि PEAR encryption packages पर एक नजर डालें एक पासवर्ड से सुरक्षित ज़िप फ़ाइल

उत्तर

6

जगह ले सकता है खोजने की कोशिश कर रहा हूँ। वे सभी mcrypt पर भरोसा नहीं करते हैं - उदाहरण के लिए Crypt_Blowfish

2

आप mcrypt विस्तार स्थापित होने से परहेज नहीं करते हैं, तो इस कोड को यह करना चाहिए:

function Encrypt($string, $key) 
{ 
    if (extension_loaded('mcrypt') === true) 
    { 
     return base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, substr($key, 0, mcrypt_get_key_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB)), trim($string), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
    } 

    return false; 
} 

function Decrypt($string, $key) 
{ 
    if (extension_loaded('mcrypt') === true) 
    { 
     return trim(mcrypt_decrypt(MCRYPT_BLOWFISH, substr($key, 0, mcrypt_get_key_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB)), base64_decode($string), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
    } 

    return false; 
} 

function Encrypt_File($source, $destination, $key) 
{ 
    if (extension_loaded('mcrypt') === true) 
    { 
     if (is_file($source) === true) 
     { 
      $source = file_get_contents($source); 

      if (file_put_contents($destination, Encrypt($source, $key), LOCK_EX) !== false) 
      { 
       return true; 
      } 
     } 
    } 

    return false; 
} 

function Decrypt_File($source, $destination, $key) 
{ 
    if (extension_loaded('mcrypt') === true) 
    { 
     if (is_file($source) === true) 
     { 
      $source = file_get_contents($source); 

      if (file_put_contents($destination, Decrypt($source, $key), LOCK_EX) !== false) 
      { 
       return true; 
      } 
     } 
    } 

    return false; 
} 
+0

आप बेस 64 एन्कोड करने के लिए क्यों चाहिए एक फाइल की सामग्री? फाइलों के लिए बाइनरी सामग्री के साथ कुछ भी गलत नहीं है। बेस 64 एन्कोडिंग 33% – Jacco

+1

द्वारा डेटा आकार बढ़ाता है, मुझे नई लाइनें पसंद नहीं हैं, क्योंकि अगर कॉपी/पेस्ट परिदृश्य में एन्क्रिप्टेड डेटा का उपयोग करने की आवश्यकता है तो उन्हें कॉपी नहीं किया जा सकता है, लेकिन हाँ यह अभी भी बेस 64 एन्कोडिंग/डिकोडिंग के बिना काम करता है । –

-3

क्या सरल XOR के बारे में?

function Crypt($source, $key) 
{ 
$rv=''; 
for($i=0;$i<strlen($source);$i++) 
{ 
    $rv.=chr(ord($source[$i])^ord($key[$i%strlen($key)])); 
} 
return $rv; 
} 

=> क्रिप्ट (क्रिप्ट ('एएए', 'कुंजी'), 'कुंजी') रिटर्न 'एएए'।

संपादित करें:]

+0

यह एक अच्छा एल्गोरिदम है, लेकिन समस्या तब आती है जब अंतिम उपयोगकर्ता को इसे डिक्रिप्ट करने की आवश्यकता होती है। वहां एक डीकोड करने के लिए एक विंडोज ऐप लिखने के लिए शायद उन्हें डीकोड करने का एक आसान तरीका नहीं है। मैं शायद अन्य परियोजनाओं में जो मिला है उसका उपयोग करूंगा, यह अच्छा साफ और सरल है। – SeanDowney

+0

घातक त्रुटि: क्रिप्ट नहीं कर सकता() ... घातक त्रुटि: अपरिभाषित फ़ंक्शन एएस() पर कॉल करें ... NULL ...? –

+0

@ सेनडाउन: यॉस्सीरियन के अनुसार इसे स्ट्रिंग को एन्क्रिप्ट और डिक्रिप्ट करना चाहिए, केवल समस्या यह है कि मैं इसे बग फिक्स करने के बाद भी काम नहीं कर सकता। = \ –

-3

Yossarian के क्रिप्ट() फ़ंक्शन तय: निश्चित रूप से, आप

file_put_contents(Crypt(file_get_contents('file'), 'key')); 

फ़ाइल के लिए + लेखन का उपयोग करना चाहिए

function _Crypt($source, $key) 
{ 
    $result = ''; 

    for($i = 0; $i < strlen($source); $i++) 
    { 
     $result .= chr(ord($source[$i])^ord($key[$i % strlen($key)])); 
    } 

    return $result; 
} 

_Crypt('aaa', 'key'); // 
_Crypt(_Crypt('aaa', 'key'), 'key'); // aaa 
+2

क्या वह एक्सओआर है? यह एक ऐसा है - "बच्चा बहन एन्क्रिप्शन", यानी केवल आपके बच्चे की बहन से छिपाने के लिए उपयोगी है। (हाँ, आप ओटीपी और सामान का उपयोग कर सकते हैं, लेकिन यह बहुत आसान है) – Piskvor

+0

फिर भी, कभी-कभी उपयोगी होता है: पी –

+1

यह एक उपयोगी नहीं है सुरक्षा संदर्भ बिल्कुल। _Crypt एक भ्रामक कार्य नाम है। यह एन्क्रिप्शन नहीं है, यह सर्वोत्तम रूप से obfuscation है। – Jacco

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