3DES 加密方法(ECB模式) - 使用PHP

 

3DES加密(Triple DES),是三重加密演算法的通稱

而3DES共有四種模式,下面介紹的是ECB模式的寫法

首先先檢查php.ini內的 php_mcrypt.dll 檔是否被啟用(有些是libmcrypt.dll)

啟用方式將dll增加到指定位置,並在php.ini檔內加上extension=php_mcrypt.dll 即可,之後就可以撰寫加密方式如下:

 

//加密函數撰寫

function encrypt($source,$toencrypt){  

//加密用的key   

$key = $source;  

//使用3DES方法加密   

$encryptMethod = MCRYPT_TRIPLEDES; 

//初始化向量來增加安全性

$iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  

//使用mcrypt_encrypt函數加密,MCRYPT_MODE_ECB表示使用ECB模式

$encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   

//回傳解密後字串

return base64_encode($encrypted_toencrypt);  

}  

//解密函數撰寫

function decrypt($source,$todecrypt) {  

//解密用的key,必須跟加密用的key一樣   

$key = $source;  

//解密前先解開base64碼

$todecrypt = base64_decode($todecrypt);

//使用3DES方法解密

$encryptMethod = MCRYPT_TRIPLEDES;  

//初始化向量來增加安全性 

$iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);  

//使用mcrypt_decrypt函數解密,MCRYPT_MODE_ECB表示使用ECB模式  

$decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);

//回傳解密後字串

return $decrypted_todecrypt;  

}  

//寫好加解密的函數之後,就可以來進行測試了

//key設定

$source ="stanley543";

//要加密的字串

$string ="的字串";

echo "string=".$string."<br>";

//進行加密並顯示加密後的字串

$encode = encrypt($source,$string);

echo "encode=".$encode."<br>";

//進行解密並顯示解密後的字串

$decode = decrypt($source,$encode);

echo "decode=".$decode."<br>";

 

3des ECB模式加密圖結果顯示如下:

有base64碼的加密情形  

 

這邊跟大家說明幾個地方:

1. 如果沒有加解密過程沒有使用base64碼的話:

A. 會造成跨網域的資料傳輸時,接收端無法解讀(可是是加密過後的資料傳輸錯誤造成,但是在同一網站內的加解密是沒問題的)

B. 在網頁上的顯示會是亂碼(如下圖)

沒有base64碼的加密情形  

 

2. 在ECB模式當中$iv是沒有作用的(這個例子的程式如下):

   //這一行完全沒有用,可註解

   $iv = mcrypt_create_iv(mcrypt_get_iv_size($encryptMethod,MCRYPT_MODE_ECB), MCRYPT_RAND);   

   //加密程式

   $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB,$iv);   

   //解密程式

   $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB,$iv);

 

   上面兩行可改寫成下面兩行

   $encrypted_toencrypt = mcrypt_encrypt($encryptMethod, $key, $toencrypt, MCRYPT_MODE_ECB);

   $decrypted_todecrypt = mcrypt_decrypt($encryptMethod, $key, $todecrypt, MCRYPT_MODE_ECB);

 

以上就是使用PHP進行3des進行ECB模式加密、解密方法

不論是3des加密或是3des當中的ECB模式的演算原理又是ㄧ門課題

因此就先不在這篇當中多做介紹。

 

 

如果覺得對你有幫助的話. 請幫小弟按個讚吧~

 

arrow
arrow

    newaurora 發表在 痞客邦 留言(0) 人氣()