通過PHP的內(nèi)置函數(shù),通過DES算法對數(shù)據(jù)加密和解密
更新時間:2012年06月21日 06:40:43 作者:
數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼,通常稱為密文,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來內(nèi)容,通過這樣的途徑來達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的
由于項(xiàng)目的需要,要寫一個能生成“授權(quán)碼”的類(授權(quán)碼主要包含項(xiàng)目使用的到期時間),生成的授權(quán)碼將會寫入到一個文件當(dāng)中,每當(dāng)項(xiàng)目運(yùn)行的時候,會自動讀取出文件中的密文,然后使用唯一的“密鑰”來調(diào)用某個函數(shù),對密文進(jìn)行解密,從中解讀出項(xiàng)目的使用到期時間。
之前,自己有先試著寫了下,主要是base64+md5+反轉(zhuǎn)字符串。算法太過簡單,很容易被破解,而且也沒有能過做到“密鑰”在加解密中的重要性,故而舍之。
后來,查找了相關(guān)資料,發(fā)現(xiàn),原來PHP中內(nèi)置了一個功能強(qiáng)大的函數(shù)庫,即Mcrypt。
其實(shí),mcrypt本身就提供了強(qiáng)大的加密解密方法,并且支持很多流行的公開的加密算法,如DES, TripleDES, Blowfish (默認(rèn)), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB。
這里簡單的引用下百度百科關(guān)于“加密算法”的解釋:
數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼,通常稱為“密文”,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來內(nèi)容,通過這樣的途徑來達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的。 該過程的逆過程為解密,即將該編碼信息轉(zhuǎn)化為其原來數(shù)據(jù)的過程。
加密技術(shù)通常分為兩大類:“對稱式”和“非對稱式”。
對稱式加密就是加密和解密使用同一個密鑰,通常稱之為“Session Key ”這種加密技術(shù)目前被廣泛采用,如美國政府所采用的DES加密標(biāo)準(zhǔn)就是一種典型的“對稱式”加密法,它的Session Key長度為56Bits。
非對稱式加密就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為“公鑰”和“私鑰”,它們兩個必需配對使用,否則不能打開加密文件。這里的“公鑰”是指可以對外公布的,“私鑰”則不能,只能由持有人一個人知道。它的優(yōu)越性就在這里,因?yàn)閷ΨQ式的加密方法如果是在網(wǎng)絡(luò)上傳輸加密文件就很難把密鑰告訴對方,不管用什么方法都有可能被別竊聽到。而非對稱式的加密方法有兩個密鑰,且其中的“公鑰”是可以公開的,也就不怕別人知道,收件人解密時只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。
前面提到過,mcrypt支持多種國際公開的算法,我在這次的項(xiàng)目中使用的是DES算法,DES(Data Encryption Standard),這是一個對稱算法,速度較快,適用于加密大量數(shù)據(jù)的場合。
接下來我簡要的說明下加密類中會使用到的幾個函數(shù)。
--------------------------------------------------------------------------------
resource mcrypt_module_open ( string $algorithm , string $algorithm_directory , string $mode , string $mode_directory )
參數(shù)$algorithm:要使用的算法,可以通過函數(shù)mcrypt_list_algorithms()來查看所有支持的算法名稱
參數(shù)$ mode:要使用哪種模式,同樣,可以內(nèi)置函數(shù)mcrypt_list_algorithms()來查看所有支持的模式
--------------------------------------------------------------------------------
int mcrypt_enc_get_iv_size ( resource $td )
該函數(shù)將返回使用的算法的初始化向量(IV)的大?。粗悬c(diǎn)抽象),如果IV在算法中被忽略的話講返回0。
參數(shù)$td就是使用mcrypt_module_open函數(shù)的返回值。
--------------------------------------------------------------------------------
string mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_RANDOM ] )
該函數(shù)會創(chuàng)建一個初始化向量(IV)
參數(shù):
$source可以使MCRYPT_RAND,MCRYPT_DEV_RANDOM,
MCRYPT_DEV_URANDOM
注意:PHP5.3.0以上的版本,只支持MCRYPT_RAND
返回值:
成功,則返回一個字符串型的初始向量,失敗,則返回False
--------------------------------------------------------------------------------
int mcrypt_enc_get_key_size ( resource $td )
該函數(shù)能夠取得當(dāng)前算法所支持的最大的密鑰長度(以字節(jié)計(jì)算)
int mcrypt_generic_init ( resource $td , string $key , string $iv )
調(diào)用mcrypt_generic() or mdecrypt_generic()之前,首先需要調(diào)用該函數(shù),該函數(shù)能夠幫我們初始化緩沖區(qū),用以存放加密數(shù)據(jù)。
參數(shù)$key:密鑰長度,記住,當(dāng)前$key的值,要比函數(shù)mcrypt_enc_get_key_size()返回的值小
問題:$key的值,越大越好嗎?有同學(xué)會的,幫忙解答下。
--------------------------------------------------------------------------------
string mcrypt_generic ( resource $td , string $data )
完成了前面的工作之后,就可以調(diào)用該函數(shù)用以加密數(shù)據(jù)了。
參數(shù)$data:要加密的數(shù)據(jù)內(nèi)容
返回值:返回加密后的密文
--------------------------------------------------------------------------------
bool mcrypt_generic_deinit ( resource $td )
該函數(shù)能夠幫我們卸載當(dāng)前使用的加密模塊。
返回值
成功時返回 TRUE, 或者在失敗時返回 FALSE.
--------------------------------------------------------------------------------
string mdecrypt_generic ( resource $td , string $data )
該函數(shù)能夠用來解密數(shù)據(jù)。
注意:解密后的數(shù)據(jù)可能比實(shí)際上的更長,可能會有后續(xù)的\0,需去掉
--------------------------------------------------------------------------------
bool mcrypt_module_close ( resource $td )
關(guān)閉指定的加密模塊資源句柄
返回值
成功時返回 TRUE, 或者在失敗時返回 FALSE.
--------------------------------------------------------------------------------
貼上代碼:
<?php
class authCode {
public $ttl;//到期時間 時間格式:20120101(年月日)
public $key_1;//密鑰1
public $key_2;//密鑰2
public $td;
public $ks;//密鑰的長度
public $iv;//初始向量
public $salt;//鹽值(某個特定的字符串)
public $encode;//加密后的信息
public $return_array = array(); // 返回帶有MAC地址的字串?dāng)?shù)組
public $mac_addr;//mac地址
public $filepath;//保存密文的文件路徑
public function __construct(){
//獲取物理地址
$this->mac_addr=$this->getmac(PHP_OS);
$this->filepath="./licence.txt";
$this->ttl="20120619";//到期時間
$this->salt="~!@#$";//鹽值,用以提高密文的安全性
// echo "<pre>".print_r(mcrypt_list_algorithms ())."</pre>";
// echo "<pre>".print_r(mcrypt_list_modes())."</pre>";
}
/**
* 對明文信息進(jìn)行加密
* @param $key 密鑰
*/
public function encode($key) {
$this->td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式
$size=mcrypt_enc_get_iv_size($this->td);//設(shè)置初始向量的大小
$this->iv = mcrypt_create_iv($size, MCRYPT_RAND);//創(chuàng)建初始向量
$this->ks = mcrypt_enc_get_key_size($this->td);//返回所支持的最大的密鑰長度(以字節(jié)計(jì)算)
$this->key_1 = substr(md5(md5($key).$this->salt),0,$this->ks);
mcrypt_generic_init($this->td, $this->key_1, $this->iv); //初始處理
//要保存到明文
$con=$this->mac_addr.$this->ttl;
//加密
$this->encode = mcrypt_generic($this->td, $con);
//結(jié)束處理
mcrypt_generic_deinit($this->td);
//將密文保存到文件中
$this->savetofile();
}
/**
* 對密文進(jìn)行解密
* @param $key 密鑰
*/
public function decode($key) {
try {
if (!file_exists($this->filepath)){
throw new Exception("授權(quán)文件不存在");
}else{//如果授權(quán)文件存在的話,則讀取授權(quán)文件中的密文
$fp=fopen($this->filepath,'r');
$secret=fread($fp,filesize($this->filepath));
$this->key_2 = substr(md5(md5($key).$this->salt),0,$this->ks);
//初始解密處理
mcrypt_generic_init($this->td, $this->key_2, $this->iv);
//解密
$decrypted = mdecrypt_generic($this->td, $secret);
//解密后,可能會有后續(xù)的\0,需去掉
$decrypted=trim($decrypted) . "\n";
//結(jié)束
mcrypt_generic_deinit($this->td);
mcrypt_module_close($this->td);
return $decrypted;
}
}catch (Exception $e){
echo $e->getMessage();
}
}
/**
* 將密文保存到文件中
*/
public function savetofile(){
try {
$fp=fopen($this->filepath,'w+');
if (!$fp){
throw new Exception("文件操作失敗");
}
fwrite($fp,$this->encode);
fclose($fp);
}catch (Exception $e){
echo $e->getMessage();
}
}
/**
* 取得服務(wù)器的MAC地址
*/
public function getmac($os_type){
switch ( strtolower($os_type) ){
case "linux":
$this->forLinux();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
$this->forWindows();
break;
}
$temp_array = array();
foreach( $this->return_array as $value ){
if (preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$value,$temp_array )){
$mac_addr = $temp_array[0];
break;
}
}
unset($temp_array);
return $mac_addr;
}
/**
* windows服務(wù)器下執(zhí)行ipconfig命令
*/
public function forWindows(){
@exec("ipconfig /all", $this->return_array);
if ( $this->return_array )
return $this->return_array;
else{
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
if ( is_file($ipconfig) )
@exec($ipconfig." /all", $this->return_array);
else
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array);
return $this->return_array;
}
}
/**
* Linux服務(wù)器下執(zhí)行ifconfig命令
*/
public function forLinux(){
@exec("ifconfig -a", $this->return_array);
return $this->return_array;
}
}
$code=new authCode();
//加密
$code->encode("~!@#$%^");
//解密
echo $code->decode("~!@#$%^");
?>
原創(chuàng)文章:WEB開發(fā)_小飛
之前,自己有先試著寫了下,主要是base64+md5+反轉(zhuǎn)字符串。算法太過簡單,很容易被破解,而且也沒有能過做到“密鑰”在加解密中的重要性,故而舍之。
后來,查找了相關(guān)資料,發(fā)現(xiàn),原來PHP中內(nèi)置了一個功能強(qiáng)大的函數(shù)庫,即Mcrypt。
其實(shí),mcrypt本身就提供了強(qiáng)大的加密解密方法,并且支持很多流行的公開的加密算法,如DES, TripleDES, Blowfish (默認(rèn)), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB。
這里簡單的引用下百度百科關(guān)于“加密算法”的解釋:
數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼,通常稱為“密文”,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來內(nèi)容,通過這樣的途徑來達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的。 該過程的逆過程為解密,即將該編碼信息轉(zhuǎn)化為其原來數(shù)據(jù)的過程。
加密技術(shù)通常分為兩大類:“對稱式”和“非對稱式”。
對稱式加密就是加密和解密使用同一個密鑰,通常稱之為“Session Key ”這種加密技術(shù)目前被廣泛采用,如美國政府所采用的DES加密標(biāo)準(zhǔn)就是一種典型的“對稱式”加密法,它的Session Key長度為56Bits。
非對稱式加密就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為“公鑰”和“私鑰”,它們兩個必需配對使用,否則不能打開加密文件。這里的“公鑰”是指可以對外公布的,“私鑰”則不能,只能由持有人一個人知道。它的優(yōu)越性就在這里,因?yàn)閷ΨQ式的加密方法如果是在網(wǎng)絡(luò)上傳輸加密文件就很難把密鑰告訴對方,不管用什么方法都有可能被別竊聽到。而非對稱式的加密方法有兩個密鑰,且其中的“公鑰”是可以公開的,也就不怕別人知道,收件人解密時只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。
前面提到過,mcrypt支持多種國際公開的算法,我在這次的項(xiàng)目中使用的是DES算法,DES(Data Encryption Standard),這是一個對稱算法,速度較快,適用于加密大量數(shù)據(jù)的場合。
接下來我簡要的說明下加密類中會使用到的幾個函數(shù)。
--------------------------------------------------------------------------------
resource mcrypt_module_open ( string $algorithm , string $algorithm_directory , string $mode , string $mode_directory )
參數(shù)$algorithm:要使用的算法,可以通過函數(shù)mcrypt_list_algorithms()來查看所有支持的算法名稱
參數(shù)$ mode:要使用哪種模式,同樣,可以內(nèi)置函數(shù)mcrypt_list_algorithms()來查看所有支持的模式
--------------------------------------------------------------------------------
int mcrypt_enc_get_iv_size ( resource $td )
該函數(shù)將返回使用的算法的初始化向量(IV)的大?。粗悬c(diǎn)抽象),如果IV在算法中被忽略的話講返回0。
參數(shù)$td就是使用mcrypt_module_open函數(shù)的返回值。
--------------------------------------------------------------------------------
string mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_RANDOM ] )
該函數(shù)會創(chuàng)建一個初始化向量(IV)
參數(shù):
$source可以使MCRYPT_RAND,MCRYPT_DEV_RANDOM,
MCRYPT_DEV_URANDOM
注意:PHP5.3.0以上的版本,只支持MCRYPT_RAND
返回值:
成功,則返回一個字符串型的初始向量,失敗,則返回False
--------------------------------------------------------------------------------
int mcrypt_enc_get_key_size ( resource $td )
該函數(shù)能夠取得當(dāng)前算法所支持的最大的密鑰長度(以字節(jié)計(jì)算)
int mcrypt_generic_init ( resource $td , string $key , string $iv )
調(diào)用mcrypt_generic() or mdecrypt_generic()之前,首先需要調(diào)用該函數(shù),該函數(shù)能夠幫我們初始化緩沖區(qū),用以存放加密數(shù)據(jù)。
參數(shù)$key:密鑰長度,記住,當(dāng)前$key的值,要比函數(shù)mcrypt_enc_get_key_size()返回的值小
問題:$key的值,越大越好嗎?有同學(xué)會的,幫忙解答下。
--------------------------------------------------------------------------------
string mcrypt_generic ( resource $td , string $data )
完成了前面的工作之后,就可以調(diào)用該函數(shù)用以加密數(shù)據(jù)了。
參數(shù)$data:要加密的數(shù)據(jù)內(nèi)容
返回值:返回加密后的密文
--------------------------------------------------------------------------------
bool mcrypt_generic_deinit ( resource $td )
該函數(shù)能夠幫我們卸載當(dāng)前使用的加密模塊。
返回值
成功時返回 TRUE, 或者在失敗時返回 FALSE.
--------------------------------------------------------------------------------
string mdecrypt_generic ( resource $td , string $data )
該函數(shù)能夠用來解密數(shù)據(jù)。
注意:解密后的數(shù)據(jù)可能比實(shí)際上的更長,可能會有后續(xù)的\0,需去掉
--------------------------------------------------------------------------------
bool mcrypt_module_close ( resource $td )
關(guān)閉指定的加密模塊資源句柄
返回值
成功時返回 TRUE, 或者在失敗時返回 FALSE.
--------------------------------------------------------------------------------
貼上代碼:
復(fù)制代碼 代碼如下:
<?php
class authCode {
public $ttl;//到期時間 時間格式:20120101(年月日)
public $key_1;//密鑰1
public $key_2;//密鑰2
public $td;
public $ks;//密鑰的長度
public $iv;//初始向量
public $salt;//鹽值(某個特定的字符串)
public $encode;//加密后的信息
public $return_array = array(); // 返回帶有MAC地址的字串?dāng)?shù)組
public $mac_addr;//mac地址
public $filepath;//保存密文的文件路徑
public function __construct(){
//獲取物理地址
$this->mac_addr=$this->getmac(PHP_OS);
$this->filepath="./licence.txt";
$this->ttl="20120619";//到期時間
$this->salt="~!@#$";//鹽值,用以提高密文的安全性
// echo "<pre>".print_r(mcrypt_list_algorithms ())."</pre>";
// echo "<pre>".print_r(mcrypt_list_modes())."</pre>";
}
/**
* 對明文信息進(jìn)行加密
* @param $key 密鑰
*/
public function encode($key) {
$this->td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式
$size=mcrypt_enc_get_iv_size($this->td);//設(shè)置初始向量的大小
$this->iv = mcrypt_create_iv($size, MCRYPT_RAND);//創(chuàng)建初始向量
$this->ks = mcrypt_enc_get_key_size($this->td);//返回所支持的最大的密鑰長度(以字節(jié)計(jì)算)
$this->key_1 = substr(md5(md5($key).$this->salt),0,$this->ks);
mcrypt_generic_init($this->td, $this->key_1, $this->iv); //初始處理
//要保存到明文
$con=$this->mac_addr.$this->ttl;
//加密
$this->encode = mcrypt_generic($this->td, $con);
//結(jié)束處理
mcrypt_generic_deinit($this->td);
//將密文保存到文件中
$this->savetofile();
}
/**
* 對密文進(jìn)行解密
* @param $key 密鑰
*/
public function decode($key) {
try {
if (!file_exists($this->filepath)){
throw new Exception("授權(quán)文件不存在");
}else{//如果授權(quán)文件存在的話,則讀取授權(quán)文件中的密文
$fp=fopen($this->filepath,'r');
$secret=fread($fp,filesize($this->filepath));
$this->key_2 = substr(md5(md5($key).$this->salt),0,$this->ks);
//初始解密處理
mcrypt_generic_init($this->td, $this->key_2, $this->iv);
//解密
$decrypted = mdecrypt_generic($this->td, $secret);
//解密后,可能會有后續(xù)的\0,需去掉
$decrypted=trim($decrypted) . "\n";
//結(jié)束
mcrypt_generic_deinit($this->td);
mcrypt_module_close($this->td);
return $decrypted;
}
}catch (Exception $e){
echo $e->getMessage();
}
}
/**
* 將密文保存到文件中
*/
public function savetofile(){
try {
$fp=fopen($this->filepath,'w+');
if (!$fp){
throw new Exception("文件操作失敗");
}
fwrite($fp,$this->encode);
fclose($fp);
}catch (Exception $e){
echo $e->getMessage();
}
}
/**
* 取得服務(wù)器的MAC地址
*/
public function getmac($os_type){
switch ( strtolower($os_type) ){
case "linux":
$this->forLinux();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
$this->forWindows();
break;
}
$temp_array = array();
foreach( $this->return_array as $value ){
if (preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$value,$temp_array )){
$mac_addr = $temp_array[0];
break;
}
}
unset($temp_array);
return $mac_addr;
}
/**
* windows服務(wù)器下執(zhí)行ipconfig命令
*/
public function forWindows(){
@exec("ipconfig /all", $this->return_array);
if ( $this->return_array )
return $this->return_array;
else{
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
if ( is_file($ipconfig) )
@exec($ipconfig." /all", $this->return_array);
else
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array);
return $this->return_array;
}
}
/**
* Linux服務(wù)器下執(zhí)行ifconfig命令
*/
public function forLinux(){
@exec("ifconfig -a", $this->return_array);
return $this->return_array;
}
}
$code=new authCode();
//加密
$code->encode("~!@#$%^");
//解密
echo $code->decode("~!@#$%^");
?>
原創(chuàng)文章:WEB開發(fā)_小飛
相關(guān)文章
PHP的Yii框架中創(chuàng)建視圖和渲染視圖的方法詳解
這篇文章主要介紹了PHP的Yii框架中創(chuàng)建視圖和渲染視圖的方法詳解,包括CWidget小物件的講解及視圖中渲染另一個視圖的方法等,需要的朋友可以參考下2016-03-03解決PHP4.0 和 PHP5.0類構(gòu)造函數(shù)的兼容問題
以下是對解決PHP4.0和PHP5.0類構(gòu)造函數(shù)兼容問題的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考一下2013-08-08php中使用preg_replace函數(shù)匹配圖片并加上鏈接的方法
preg_replace 執(zhí)行正則表達(dá)式的搜索和替換,如果只是單純的匹配字符串建議使用str_replace(),因?yàn)槠鋱?zhí)行效率高的多2013-02-02Ajax實(shí)現(xiàn)對靜態(tài)頁面的文章訪問統(tǒng)計(jì)功能示例
這篇文章主要介紹了Ajax實(shí)現(xiàn)對靜態(tài)頁面的文章訪問統(tǒng)計(jì)功能,結(jié)合簡單實(shí)例形式分析了靜態(tài)頁面實(shí)現(xiàn)訪問統(tǒng)計(jì)功能的計(jì)數(shù)操作相關(guān)技巧,需要的朋友可以參考下2016-10-10phpy之PHP與Python互調(diào)庫實(shí)現(xiàn)AI編程
這篇文章主要為大家介紹了phpy之PHP與Python互調(diào)庫實(shí)現(xiàn)AI編程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12php實(shí)現(xiàn)的遞歸提成方案實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)的遞歸提成方案,以完整實(shí)例形式較為詳細(xì)的分析了php提成方案的數(shù)據(jù)庫設(shè)計(jì)及功能實(shí)現(xiàn)技巧,涉及PHP數(shù)學(xué)運(yùn)算的相關(guān)技巧,需要的朋友可以參考下2015-11-11PHP CodeBase:將時間顯示為"剛剛""n分鐘/小時前"的方法詳解
本篇文章是對PHP CodeBase:將時間顯示為"剛剛""n分鐘/小時前"的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php進(jìn)程通信之共享內(nèi)存詳細(xì)講解
這篇文章主要介紹了php進(jìn)程通信之共享內(nèi)存,共享內(nèi)存是一種最為高效的進(jìn)程間通信(IPC)方式,進(jìn)程可以直接讀寫內(nèi)存,而不需要任何數(shù)據(jù)的拷貝2022-09-09