PHP檔案加密解

2021-07-06 03:47:42 字數 3029 閱讀 8174

<?php

/** 

* 公鑰加密 

* * @param string 明文 

* @param string 證書檔案(.crt) 

* @return string 密文(base64編碼) 

*/  

function publickey_encodeing($sourcestr, $filename)  

}  /** 

* 私鑰解密 

* * @param string 密文(二進位制格式且base64編碼) 

* @param string 金鑰檔案(.pem / .key) 

* @param string 密文是否**於js的rsa加密 

* @return string 明文 

*/  

function privatekey_decodeing($crypttext, $filename, $fromjs = false)  

return ;  

}  //js->php 測試  

$txt_en = $_post['password'];  

$txt_en = base64_encode(pack("h*", $txt_en));  

$file = 'ssl/server.pem';  

$txt_de = privatekey_decodeing($txt_en, $file, true);  

var_dump($txt_de);  

//php->php 測試  

$data = "漢字:1a2b3c";  

$config = core::getinstance()->config;  

$file1 = 'ssl/server.crt';  

$file2 = 'ssl/server.pem';  

$a = publickey_encodeing($data, $file1);  

$b = privatekey_decodeing($a, $file2);  

var_dump($b); 

?>

php zend 解密

第一種方式使用方便,不需要對

php伺服器進行配置,或載入其他模組,因此可以方便地部署在租用空間的伺服器上。對檔案進行加密也很簡單,只需要把

php檔案上傳到加密**,就可以生成加密之後的檔案,替換原來的

php檔案之後就可以正常執行了。

第二種方式使用起來相對複雜一些,

php伺服器上需要載入額外的模組。對於租用空間,沒有管理員許可權的使用者來說,這是乙個問題。

通過分析,我們得出以下顯而易見的一些結論:

l因為沒有載入

php擴充套件,因此加密之後的檔案的執行過程仍然完全遵循圖

1中的流程。因此,加密之後的檔案本身應該是乙個完全符合

php語法要求的,可以被

php編譯器正確解析,並可以被

php vm

正確執行的檔案。 l

那麼,解密的過程只能是在這個加密之後的檔案的執行過程中進行的,也就是說,這個加密之後的

php檔案是乙個可以自解密的

php檔案,這個檔案中包含了所有解密過程中需要用到的資訊。因此,擁有了這個加密之後的檔案,其實也同時擁有了解密所需的所有資訊:解密的方法、和解密過程中所需的資料。 l

無論解密過程如何,最後一定是解密出原來的明文內容,然後進行執行的,否則就不符合圖

1的執行流程了。

現在,我們可以思考如何進行解密了:

l一種方式,模擬執行這個加密的

php檔案,因為這個檔案是自解密的,因此,最後一定可以得到明文。

這種方式是最容易想到的,但比較難於執行,並且這個檔案中可能包含多個執行陷阱,擾亂模擬執行的過程。

l另一種方式,直接在

php環境中真實地執行這個加密的

php檔案,在

php的內部得到解密之後的明文。 在

php中,把一段文字作為**進行執行,我知道的有以下幾種方式: u

把文字儲存到另乙個檔案,

include

這個檔案進行。 u

使用eval

函式,直接執行這段文字。

參考這個

eval

的處理函式,

zend\zend_vm_execute.h

中2529

行的zend_include_or_eval_spec_const_handler

函式,和

zend\zend_execute_api.c

中第1156

行的zend_eval_string1

函式。

u使用包含執行功能的其它函式。

比如,preg_replace

函式,在

pattern

中指定e(preg_replace_eval)

作為引數,就會先執行引數中的文字,然後執行替換(這個引數在

php5.5

將不再支援)。參考

preg_replace

函式的處理函式,

ext\pcre\php-pcre.c

中第1003

行的php_pcre_replace_impl

函式,和第

897行

preg_do_eval

函式。

為了看起來更安全,很多進行加密的都不會選擇

include

方式,而會選擇後兩種。其實三種方式的安全性是一樣的,沒有任何差別。因為無論哪種方式,都遵循圖

1中的執行流程。

那麼,我們在圖1中的

zend\zend_language_scanner.c

中的compile_string

函式中增加乙個輸出,把所有需要編譯文字輸出出來,其中一定有解密之後的明文。

一些問題:

l為什麼不使用

include/require?

因為使用

include

方式,需要生成乙個包含明文的檔案,可能加密廠商認為這樣不安全,怕別人找到這個檔案,所以大部分不使用這種方式。

ZendGuard加密PHP檔案

2.解壓zendguard 7.0.0 linux.gtk.x86.tar.gz 3.生成license 許可證 許可證文件 許可限制 date 過期時間 concurrent usersip range 網段限制,docker 172.17.0.0 16zendid unique code bas...

vue js Angularjs AES加密解密

需要兩個js檔案。aes.js和mode ecb.js 以angular為例,現在www目錄下的index.html檔案中引入這兩個js檔案 加密相關 build lib cryptojslib rollups aes.js script build lib cryptojslib componen...

在PHP中使用AES加密演算法加密資料及解密資料

這個演算法可以將資料加密後,儲存起來,到需要用的時候,用之前加密的秘鑰將之還原。除了這個之外,還有aes這個演算法能夠將資料很好的加密起來,在傳輸過程中不容易被破解。在php中,我們必須先安裝好mcrypt這個模組,並且新增相應版本的擴充套件到php中。aes加密模式和填充方式有以下之中,但不是全部...