PHP ile bir şifreli zip arşivi oluşturma

3 Cevap php

Ben bir zip içine. Txt dosyayı şifrelemek için bir yol arıyor, ama güvenli bir şifre korumalı bir şekilde duyuyorum. Amacım kimsenin ekin içeriğini okumak mümkün olmadan, bana bu dosyayı e-posta olduğunu.

Herkes bu başarmak kolay, ve her şeyden önce, güvenli bir yol biliyor mu? Ben zip arşivler oluşturabilirsiniz, ama bu ne kadar güvenli olduğunu, onları şifrelemek için biliyorum, ya da bilmiyorum.

3 Cevap

Bu kullanabilirsiniz:

<?php echo system('zip -P pass file.zip file.txt'); ?>

Geçiş şifre ve dosya.txt file.zip içine sıkıştırılmış nereye. Bu, Windows ve Linux üzerinde çalışması gerekir, sadece Windows için zip bir ücretsiz sürümünü almak gerekir (http://www.info-zip.org/Zip.html#Win32)

Güvenlik Bu tür kaba kuvvet saldırılarına, sözlük saldırıları ve vs ile kırılmış olabilir Ama bir tahmin için uzun ve zor şifrenizi seçti özel eğer, o kadar kolay değil.

Daha fazla araç AES-şifrelenmiş ZIP ​​dosyalarını desteklemektedir. Bu bu kadar güvenli çalışır.

EDIT2: dinamik PHP AES-şifreli zip arşivleri oluşturmak için DotNetZip PHP kullanabilirsiniz. DotNetZip. NET dilleri (C #, VB, vb) için tasarlanmış bir. NET kütüphanedir. (Ama DotNetZip AES yapar ve ücretsiz, ve PHP çalışır: Sadece Windows üzerinde çalışır..

Bu benim kullanılan koddur. (Win32 üzerinde PHP v5.2.9)

<?php
try
{
  $fname = "zip-generated-from-php-" . date('Y-m-d-His') . ".zip";
  $zipOutput = "c:\\temp\\" . $fname;
  $zipfact = new COM("Ionic.Zip.ZipFile");
  $zip->Name = $zipOutput;
  $dirToZip= "c:\\temp\\psh";
  # Encryption:  3 => 256-bit AES.  
  #     2 => 128-bit AES.  
  #     1 => PKZIP (Weak).  
  #     0 => None
  $zip->Encryption = 3;
  $zip->Password = "AES-Encryption-Is-Secure";
  $zip->AddDirectory($dirToZip);
  $zip->Save();
  $zip->Dispose();

  if (file_exists($zipOutput))
  {
    header('Cache-Control: no-cache, must-revalidate');
    header('Content-Type: application/x-zip'); 
    header('Content-Disposition: attachment; filename=' . $fname);
    header('Content-Length: ' . filesize($zipOutput));
    readfile($zipOutput);
    unlink($zipOutput);
  }
  else 
  {
    echo '<html>';
    echo '  <head>';
    echo '  <title>Calling DotNetZip from PHP through COM</title>';
    echo '  <link rel="stylesheet" href="basic.css"/>';
    echo '  </head>';
    echo '<body>';
    echo '<h2>Whoops!</h2>' . "<br/>\n";
    echo '<p>The file was not successfully generated.</p>';
    echo '</body>';
    echo '</html>';
  } 
}
catch (Exception $e) 
{
    echo '<html>';
    echo '  <head>';
    echo '  <title>Calling DotNetZip from PHP through COM</title>';
    echo '  <link rel="stylesheet" href="basic.css"/>';
    echo '  </head>';
    echo '<body>';
    echo '<h2>Whoops!</h2>' . "<br/>\n";
    echo '<p>The file was not successfully generated.</p>';
    echo '<p>Caught exception: ',  $e->getMessage(), '</p>', "\n";
    echo '<pre>';
    echo $e->getTraceAsString(), "\n";
    echo '</pre>';
    echo '</body>';
    echo '</html>';
}

?>

Ben PHP ile çalışması için DotNetZip değiştirmek zorunda: Ben Name özelliği okuma / yazma yapmak zorunda ve ben bu COM çağrılabilir yapmak zorunda kaldı. Bu değişiklik v1.8.2.3 release ilk mevcuttur.

This is how I did it. It's with an excel, but it's the same thing.

  • Php rastgele bir kod adı yaratalım.
  • Db veya retrieve.php tarafından dahil edilecek bir dosyaya kod adını kaydedin.
  • Kendine kod adı posta.

  • Web retrieve.php aracılığıyla erişim? Kod adı = [kodadı]

  • Kod adı doğruysa php kontrol edelim. (Hatta belki de o yaş).
  • Size göndermek gereken veri hafızada excel / textfile oluşturun.
  • Kod adı ile (sadece bildiğiniz) yerel bir şifre ekleyerek bir şifreleme kodu oluşturun. (Ben eklemek demek ama aynı zamanda karışık veya xor-ed veya substr ... olabilir)
  • Oluşturulan şifreleme kodu ile anında şifreleyebilirsiniz.
  • Db veya yapılandırma dosyasından kod adını çıkarın.
  • (Boyutu için sıkıştırılmış ya da değil) bir posta bu şifreli belgeyi dönün.
  • Belki yerel tam kod adı kullanmayı bilmek posta kod adı itibaren ilk iki karakter ekleyin.

  • İndirilen dosyayı çözmek için yerel bir şifre çözme komut dosyası kullan. Bir şifre çözme anahtarı oluşturmak için aynı kod adı / şifre algoritması kullanır.

I use gibberish-aes-php. ( https://github.com/ivantcholakov/gibberish-aes-php )
Because then I can use https://github.com/mdp/gibberish-aes as javascript on a client decoder (for things I want to take a quick peek at in a browser).