關於使用php產生加密的zip檔案解決辦法

來源:互聯網
上載者:User
關於使用php產生加密的zip檔案
phpmyadmin裡面有個zip.lib.php,可以產生zip檔案,可是不能加密。那位大哥知道如何加密?(我說的加密是指在解壓該檔案的時候回要求輸入解壓密碼)。
網上找了好多,基本上都是借用winrar或者zip通過命令列加密,有沒有通過php產生加密的zip檔案的?

現在怎麼不能選專家了,還想請嘮叨大哥看看呢。。。

------解決方案--------------------
幫頂!!!!!
------解決方案--------------------
1 現有的操作zip的php提供的函數分為兩大類,一是ZipArchive 一是zip,沒有發現有對檔案加密碼的功能.
2 最簡單的方式就是用winrar或者zip通過命令列加密,這個你還不選擇.
3 另外就是分析加密和未加密後的檔案,通過檔案讀寫的方式操作,這個可行性不太高,而且對實現技術要求很高.

------解決方案--------------------
似乎不能加密,加密使用其它技術實現
------解決方案--------------------
加密規則自己定議啊,最簡單的有字元轉換了,比如一個"aaaaa",加密後你想讓它變"bbbbb"。


/**
* Passport 加密函數
*
* @param string 等待加密的原字串
* @param string 私人密匙(用於解密和加密)
*
* @return string 原字串經過私人密匙加密後的結果
*/
function passport_encrypt($txt, $key)
{

// 使用隨機數發生器產生 0~32000 的值並 MD5()
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));

// 變數初始化
$ctr = 0;
$tmp = '';

// for 迴圈,$i 為從 0 開始,到小於 $txt 字串長度的整數
for($i = 0; $i < strlen($txt); $i++)
{
// 如果 $ctr = $encrypt_key 的長度,則 $ctr 清零
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
// $tmp 字串在末尾增加兩位,其第一位內容為 $encrypt_key 的第 $ctr 位,
// 第二位內容為 $txt 的第 $i 位與 $encrypt_key 的 $ctr 位取異或。然後 $ctr = $ctr + 1
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}

// 返回結果,結果為 passport_key() 函數傳回值的 base65 編碼結果
return base64_encode(passport_key($tmp, $key));
}

/**
* Passport 解密函數
*
* @param string 加密後的字串
* @param string 私人密匙(用於解密和加密)
*
* @return string 字串經過私人密匙解密後的結果
*/
function passport_decrypt($txt, $key)
{
// $txt 的結果為加密後的字串經過 base64 解碼,然後與私人密匙一起,
// 經過 passport_key() 函數處理後的傳回值
$txt = passport_key(base64_decode($txt), $key);

// 變數初始化
$tmp = '';
// for 迴圈,$i 為從 0 開始,到小於 $txt 字串長度的整數
for ($i = 0; $i < strlen($txt); $i++)
{
// $tmp 字串在末尾增加一位,其內容為 $txt 的第 $i 位,
// 與 $txt 的第 $i + 1 位取異或。然後 $i = $i + 1
$tmp .= $txt[$i] ^ $txt[++$i];
}

// 返回 $tmp 的值作為結果
return $tmp;
}

/**
* Passport 密匙處理函數
*
* @param string 待加密或待解密的字串
* @param string 私人密匙(用於解密和加密)
*
* @return string 處理後的密匙
*/
function passport_key($txt, $encrypt_key)
{
// 將 $encrypt_key 賦為 $encrypt_key 經 md5() 後的值
$encrypt_key = md5($encrypt_key);

// 變數初始化
$ctr = 0;
$tmp = '';

// for 迴圈,$i 為從 0 開始,到小於 $txt 字串長度的整數
for($i = 0; $i < strlen($txt); $i++)
{
// 如果 $ctr = $encrypt_key 的長度,則 $ctr 清零
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
// $tmp 字串在末尾增加一位,其內容為 $txt 的第 $i 位,
// 與 $encrypt_key 的第 $ctr + 1 位取異或。然後 $ctr = $ctr + 1
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
}

// 返回 $tmp 的值作為結果
return $tmp;
}

/**
* Passport 資訊(數組)編碼函數
*
* @param array 待編碼的數組
*
* @return string 數組經編碼後的字串
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.