PHP mcrypt可逆加密算法分析
更新時(shí)間:2011年07月19日 23:01:30 作者:
PHP使用mcrypt拓展的加密算法進(jìn)行加密解密,學(xué)習(xí)php的朋友可以參考下。
數(shù)據(jù)加密在我們生活中的地位已經(jīng)越來越重要了,尤其是考慮到在網(wǎng)絡(luò)上發(fā)生的大量交易和傳輸?shù)拇罅繑?shù)據(jù)。對(duì)于不需要還原為原始數(shù)據(jù)的信息我們可以使用MD5、sha1等不可逆加密算法對(duì)數(shù)據(jù)進(jìn)行加密處理,但對(duì)于交易信息等需要還原為原始數(shù)據(jù)的重要信息則必須使用可還原的加密算法進(jìn)行加密了。當(dāng)然你可以自己寫一個(gè)可逆加密的算法進(jìn)行加密和解密計(jì)算。本文中我們介紹的是使用 mcrypt模塊進(jìn)行加密解密操作。
Mcrypt的優(yōu)點(diǎn)不僅僅在于其提供的加密算法較多,在windows下隨PHP包一起發(fā)布,還在于它可以對(duì)數(shù)據(jù)進(jìn)行加/解密處理,此外,它還提供了包括DES算法在內(nèi)的35種處理數(shù)據(jù)用的函數(shù)。
/**
+-----------------------------------------------------
* Mcrypt 加密/解密
* @param String $date 要加密和解密的數(shù)據(jù)
* @param String $mode encode 默認(rèn)為加密/decode 為解密
* @return String
* @author zxing@97md.net Mon Sep 14 22:59:28 CST 2009
+-----------------------------------------------------
* @example
*/
function ZxingCrypt($date,$mode = 'encode'){
$key = md5('zxing');//用MD5哈希生成一個(gè)密鑰,注意加密和解密的密鑰必須統(tǒng)一
if ($mode == 'decode'){
$date = base64_decode($date);
}
if (function_exists('mcrypt_create_iv')){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
}
if (isset($iv) && $mode == 'encode'){
$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $date, MCRYPT_MODE_ECB, $iv);
}elseif (isset($iv) && $mode == 'decode'){
$passcrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $date, MCRYPT_MODE_ECB, $iv);
}
if ($mode == 'encode'){
$passcrypt = base64_encode($passcrypt);
}
return $passcrypt;
}
別的網(wǎng)友的代碼
<?php
$td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
$key = "ery secret key";//密鑰
$key = substr(md5($key), 0, $ks);
mcrypt_generic_init($td, $key, $iv); //初始處理
//加密
$encrypted = mcrypt_generic($td, 'This is very important data');
//結(jié)束處理
mcrypt_generic_deinit($td);
//初始解密處理
mcrypt_generic_init($td, $key, $iv);
//解密
$decrypted = mdecrypt_generic($td, $encrypted);
//結(jié)束
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
//解密后,可能會(huì)有后續(xù)的\0,需去掉
echo trim($decrypted) . "\n";
?>
Mcrypt的優(yōu)點(diǎn)不僅僅在于其提供的加密算法較多,在windows下隨PHP包一起發(fā)布,還在于它可以對(duì)數(shù)據(jù)進(jìn)行加/解密處理,此外,它還提供了包括DES算法在內(nèi)的35種處理數(shù)據(jù)用的函數(shù)。
復(fù)制代碼 代碼如下:
/**
+-----------------------------------------------------
* Mcrypt 加密/解密
* @param String $date 要加密和解密的數(shù)據(jù)
* @param String $mode encode 默認(rèn)為加密/decode 為解密
* @return String
* @author zxing@97md.net Mon Sep 14 22:59:28 CST 2009
+-----------------------------------------------------
* @example
*/
function ZxingCrypt($date,$mode = 'encode'){
$key = md5('zxing');//用MD5哈希生成一個(gè)密鑰,注意加密和解密的密鑰必須統(tǒng)一
if ($mode == 'decode'){
$date = base64_decode($date);
}
if (function_exists('mcrypt_create_iv')){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
}
if (isset($iv) && $mode == 'encode'){
$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $date, MCRYPT_MODE_ECB, $iv);
}elseif (isset($iv) && $mode == 'decode'){
$passcrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $date, MCRYPT_MODE_ECB, $iv);
}
if ($mode == 'encode'){
$passcrypt = base64_encode($passcrypt);
}
return $passcrypt;
}
別的網(wǎng)友的代碼
復(fù)制代碼 代碼如下:
<?php
$td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
$key = "ery secret key";//密鑰
$key = substr(md5($key), 0, $ks);
mcrypt_generic_init($td, $key, $iv); //初始處理
//加密
$encrypted = mcrypt_generic($td, 'This is very important data');
//結(jié)束處理
mcrypt_generic_deinit($td);
//初始解密處理
mcrypt_generic_init($td, $key, $iv);
//解密
$decrypted = mdecrypt_generic($td, $encrypted);
//結(jié)束
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
//解密后,可能會(huì)有后續(xù)的\0,需去掉
echo trim($decrypted) . "\n";
?>
您可能感興趣的文章:
- php 的加密函數(shù) md5,crypt,base64_encode 等使用介紹
- php使用crypt()函數(shù)進(jìn)行加密
- php基于mcrypt的加密解密實(shí)例
- PHP加密擴(kuò)展庫Mcrypt安裝和實(shí)例
- PHP 加密/解密函數(shù) dencrypt(動(dòng)態(tài)密文,帶壓縮功能,支持中文)
- php結(jié)合md5實(shí)現(xiàn)的加密解密方法
- php實(shí)現(xiàn)MD5加密16位(不要默認(rèn)的32位)
- php結(jié)合md5的加密解密算法實(shí)例
- 利用PHP腳本在Linux下用md5函數(shù)加密字符串的方法
- PHP常見加密函數(shù)用法示例【crypt與md5】
相關(guān)文章
php輸出echo、print、print_r、printf、sprintf、var_dump的區(qū)別比較
本篇文章是對(duì)php輸出echo、print、print_r、printf、sprintf、var_dump的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php中3種方法統(tǒng)計(jì)字符串中每種字符的個(gè)數(shù)并排序
3種方法,統(tǒng)計(jì)字符串中每種字符的個(gè)數(shù)并排序,多種解法喲~ str_split()函數(shù)很重要2012-08-08解析mysql left( right ) join使用on與where篩選的差異
本篇文章是對(duì)mysql left( right )join使用on與where篩選的差異進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Laravel框架中隊(duì)列和工作(Queues、Jobs)操作實(shí)例詳解
這篇文章主要介紹了Laravel框架中隊(duì)列和工作(Queues、Jobs)操作實(shí)例詳解,需要的朋友可以參考下2020-04-04php聚合式迭代器的基礎(chǔ)知識(shí)點(diǎn)及實(shí)例代碼
在本篇文章里小編給大家整理的是一篇關(guān)于php聚合式迭代器的基礎(chǔ)知識(shí)點(diǎn)及實(shí)例代碼,有興趣的朋友們可以學(xué)習(xí)參考下。2021-07-07