2010-11-08 42 views
0

我使用的mcrypt這樣mcrypt的一個完整的文件加密

<?php 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $key = "This is a very secret key"; 
    $text = "Meet me at 11 o'clock behind the monument."; 
    echo strlen($text) . "\n"; 

    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); 
    echo strlen($crypttext) . "\n"; 
?> 

這工作得很好,以一定的文字進行加密。但是現在我需要將其保存到一個文件並加密整個文件。使用php5。

+0

ECB模式是EVIL,不要使用它,因爲它會以相同的方式對每個塊進行編碼,從而給出線索文件中可能存在的內容 – rsk82 2011-01-05 21:25:25

回答

1

只是一個小變化會做:

<?php 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $key = "This is a very secret key"; 
    $text = file_get_contents('path/to/your/file'); 
    echo strlen($text) . "\n"; 

    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); 
    file_put_contents('path/to/your/file', $crypttext); 
?> 

如果確實該文件是太大,它打破成多個的128塊,做他們每個人的加密。

+0

嘗試過你的方法,它會給我帶來這個錯誤 – Autolycus 2010-11-08 21:23:36

+0

30 Warning:file_put_contents(test調用堆棧:0.0022 739320 1. {main}()test.php:0 0.0028 741512 2. file_put_contents()test.php:9 – Autolycus 2010-11-08 21:24:12

+0

嘗試簡單的'file_put_contents('path/to/your/file','test');'看看它是否有效。同時在你使用'file_put_contents'的地方發佈你的確切代碼行。如果使用得當,我的代碼很好,如果你有目標文件的權限。 – 2010-11-08 21:26:02

0

最簡單的解決方案是隻讀取文件,執行加密,然後將文件寫回。

如果您正在處理非常大的文件,這會遇到內存問題,但對於小文件,它允許您在不需要任何附加代碼的情況下執行此操作。