2015年5月11日 星期一

PHP:把圖檔以 AES-128 ECB 加密

知名客戶今年再找我們開發流動應用程式。距離上架還有一段時間,於是作出新嘗試:把應用內的圖檔加密。

我看過很多的應用都有這樣的處理,特別是雜誌類應用。它們雖然加密得不錯。說是不錯,是因為某些應用就算用 AES-256 加密,但在 Snoop-It 下,加密匙還是輕易被抽出來,根本不用暴力攻擊,保護已經完全瓦解。不過,任何系統都有弱點。保護都是用來防一般大眾,有保護總比沒有的好。簡單編寫了一個 PHP 程式,把圖檔以 AES-128 ECB 進行加密的實驗:
<?php
    $folder = "./files/";
    $filename = "coupon_01.png";
    $outputFile = "coupon_01_aes.png";

    $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  
    $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);  
    $key = "*16-bytes-length";

    //  Read file content
    $pngRAW = file_get_contents($folder.$filename);

    //  Encrypt file content
    $pngCipher = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $pngRAW, MCRYPT_MODE_ECB);  
    file_put_contents($folder.$outputFile, $pngCipher);
?>

翻看 coupon_01.png 及 coupon_01_aes.png,實驗成功把檔案內容改變了。下一歲便是在 iOS 及 Android 上解密。

沒有留言: