首頁 >後端開發 >php教程 >php 可逆加密/解密函數實例代碼

php 可逆加密/解密函數實例代碼

怪我咯
怪我咯原創
2017-07-13 10:12:421716瀏覽

對於大部分密碼加密,我們可以採用md5、sha1等方法。

可以有效防止資料洩露,但是這些方法僅適用於無需還原的資料加密。

對於需要還原的訊息,則需要採用可逆的加密解密演算法。

很多項目的會員系統,都要求要有記住登入功能,在透過cookies實作功能是,由於要將客戶資訊直接儲存到cookies,如果直接寫入cookies勢必會帶來安全隱患,因此透過可逆加密後再儲存到cookies相對就安全了

函數原始碼 

function encrypt($data, $key) { 
$prep_code = serialize($data); 
$block = mcrypt_get_block_size('des', 'ecb'); 
if (($pad = $block - (strlen($prep_code) % $block)) < $block) { 
$prep_code .= str_repeat(chr($pad), $pad); 
} 
$encrypt = mcrypt_encrypt(MCRYPT_DES, $key, $prep_code, MCRYPT_MODE_ECB); 
return base64_encode($encrypt); 
} 

function decrypt($str, $key) { 
$str = base64_decode($str); 
$str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB); 
$block = mcrypt_get_block_size(&#39;des&#39;, &#39;ecb&#39;); 
$pad = ord($str[($len = strlen($str)) - 1]); 
if ($pad && $pad < $block && preg_match(&#39;/&#39; . chr($pad) . &#39;{&#39; . $pad . &#39;}$/&#39;, $str)) { 
$str = substr($str, 0, strlen($str) - $pad); 
} 
return unserialize($str); 
}

呼叫函數 

$key = &#39;okyo.cn&#39;; 
$data = array(&#39;id&#39; => 100, &#39;username&#39; => &#39;customer&#39;, &#39;password&#39; => &#39;e10adc3949ba59abbe56e057f20f883e&#39;); 
$snarr = serialize($data); 
$en = encrypt($data, $key); 
$de = decrypt($en, $key); 
echo "加密原型:"; 
print_r($data); 
echo " 
密钥:$key 
加密结果:$en 

解密结果:"; 
print_r($de);

以上是php 可逆加密/解密函數實例代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn