最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php基于mcrypt的加密解密實(shí)例

 更新時(shí)間:2014年10月27日 14:41:20   投稿:shichen2014  
這篇文章主要介紹了php基于mcrypt的加密解密的實(shí)現(xiàn)方法,以實(shí)例形式分析了mcrypt加密解密的原理與具體實(shí)現(xiàn)方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了php基于mcrypt實(shí)現(xiàn)加密解密的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

PHP中自帶了相當(dāng)多的加密的方法,這里我們來(lái)看一下mcrypt擴(kuò)展的使用方式。也是在工作中需要用這個(gè)東西加密訪問(wèn)用戶的Cookie的值,認(rèn)真的學(xué)習(xí)了這個(gè)方面的內(nèi)容。

1.簡(jiǎn)介

Mcrypt是PHP的一個(gè)擴(kuò)展,完成了常用加密算法的封裝。其實(shí)該擴(kuò)展是對(duì)mcrypt標(biāo)準(zhǔn)類庫(kù)的封裝,mcrypt完成了相當(dāng)多的常用加密算法,如DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 和 GOST加密算法,并且提供了CBC、OFB、CFB 和 ECB 四種塊加密的模型。

2.安裝和使用

要使用該擴(kuò)展,必須首先安裝mcrypt標(biāo)準(zhǔn)類庫(kù),可以在http://mcrypt.sourceforge.net 下載。該擴(kuò)展的編譯和安裝方式和常規(guī)的php擴(kuò)展相同,不在詳細(xì)說(shuō)明了。

3.四種塊加密模型

Mcrypt支持四種塊加密模型,簡(jiǎn)要說(shuō)明如下:

①. MCRYPT_MODE_ECB(electronic codebook) 適合對(duì)小數(shù)量隨機(jī)數(shù)據(jù)的加密,比如加密用戶的登錄密碼之類的。

②. MCRYPT_MODE_CBC (cipher block chaining) 適合加密安全等級(jí)較高的重要文件類型。

③. MCRYPT_MODE_CFB (cipher feedback) 適合于需要對(duì)數(shù)據(jù)流的每一個(gè)字節(jié)進(jìn)行加密的場(chǎng)合。

④. MCRYPT_MODE_OFB (output feedback, in 8bit) 和CFB模式兼容,但比CFB模式更安全。CFB模式會(huì)引起加密的錯(cuò)誤擴(kuò)散,如果一個(gè)byte出錯(cuò),則其后續(xù)的所有byte都會(huì)出錯(cuò)。OFB模式則不會(huì)有此問(wèn)題。但該模式的安全度不是很高,不建議使用。

⑤. MCRYPT_MODE_NOFB (output feedback, in nbit) 和OFB兼容,由于采用了塊操作算法,安全度更高。

⑥. MCRYPT_MODE_STREAM 是為了WAKE或者RC4等流加密算法提供的額外模型。

NOFB和STREAM僅當(dāng)mycrypt的版本號(hào)大于等于libmcrypt-2.4.x才有效。(現(xiàn)在基本上都是大于這個(gè)版本了,libmcrypt的最新主版本已經(jīng)到4了)

4.查看支持的算法和模型

①. mcrypt_list_modes()列出當(dāng)前環(huán)境支持的模型

②. mcrypt_list_algorithms()列出當(dāng)前環(huán)境支持的算法

如命令行執(zhí)行:

復(fù)制代碼 代碼如下:
php -r "var_dump(mcrypt_list_modes()); var_dump(mcrypt_list_algorithms());"

即可列出所有的結(jié)果。

5.如何使用

示例1:

復(fù)制代碼 代碼如下:
<?php
$key = "this is a secret key";
$input = "Let us meet at 9 o'clock at the secret place.";
$encrypted_data = mcrypt_ecb (MCRYPT_3DES, $key, $input, MCRYPT_ENCRYPT);
?>

最簡(jiǎn)單的方式如示例1中所示,該方法表明對(duì)$input使用3DES的算法進(jìn)行加密,加密密鑰是$key.不過(guò)這中直接調(diào)用的方法已經(jīng)不被官方推薦使用,也建議大家在開(kāi)發(fā)中不要使用此種方式,不一定哪天該方法就不能用了。在php5下使用此種方式調(diào)用時(shí),能看到一條warning信息,提示“PHP Warning: attempt to use an empty IV, which is NOT recommend”。

官方推薦的使用方式如示例2所示

示例2:

復(fù)制代碼 代碼如下:
<?php
    $key = "this is a secret key";
    $input = "Let us meet at 9 o'clock at the secret place.";
    // 打開(kāi)mcrypt,或者mcrypt類型的資源對(duì)象,該對(duì)象使用ecb模式,使用3des作為加密算法。
    $td = mcrypt_module_open('tripledes', '', 'ecb', '');
    // 創(chuàng)建iv(初始化向量)
    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    // 根據(jù)密鑰和iv初始化$td,完成內(nèi)存分配等初始化工作
    mcrypt_generic_init($td, $key, $iv);
    // 進(jìn)行加密
    $encrypted_data = mcrypt_generic($td, $input);
    // 反初始化$td,釋放資源
    mcrypt_generic_deinit($td);
    // 關(guān)閉資源對(duì)象,退出
     mcrypt_module_close($td);
?>

上述過(guò)程完成了數(shù)據(jù)的加密過(guò)程。首先選擇加密算法和加密模式創(chuàng)建mcrypt的資源對(duì)象和IV,然后初始化加密所需的buffer(內(nèi)存),進(jìn)行加密后再釋放buffer,最后關(guān)閉資源對(duì)象。

解密的過(guò)程和加密是基本相同,只要把mcrypt_generic($td, $input)替換成mdecrypt_generic($td, $input)就可以了,其它部分完全相同。當(dāng)然,對(duì)于3des這種對(duì)稱加密算法而言,加密、解密所用的key是必須完全相同的。

6. 有關(guān)IV

不是所有的模型中都需要IV. CFB和OFB是必須有IV, CBC和EBC則是可選的。對(duì)于必選IV的模式來(lái)說(shuō),其加密和解密的IV的值必須完全相同,CBC和EBC則無(wú)此要求??梢韵嗤部梢圆煌?,沒(méi)什么關(guān)系。

7.一個(gè)簡(jiǎn)單功能的加密解密類

復(fù)制代碼 代碼如下:
class AMPCrypt {
    private static function getKey(){
        return md5('exampleKey');
     }
    public static function encrypt($value){
         $td = mcrypt_module_open('tripledes', '', 'ecb', '');
         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
         $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
         mcrypt_generic_init($td, $key, $iv);
         $ret = base64_encode(mcrypt_generic($td, $value));
         mcrypt_generic_deinit($td);
         mcrypt_module_close($td);
        return $ret;
     }
    public static function dencrypt($value){
         $td = mcrypt_module_open('tripledes', '', 'ecb', '');
         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
         $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
         $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
         mcrypt_generic_init($td, $key, $iv);
         $ret = trim(mdecrypt_generic($td, base64_decode($value))) ;
         mcrypt_generic_deinit($td);
         mcrypt_module_close($td);
        return $ret;
     }
}

PS:關(guān)于加密技術(shù),本站還提供了如下加密工具供大家參考使用:

MD5在線加密工具:http://tools.jb51.net/password/CreateMD5Password

Escape加密/解密工具:http://tools.jb51.net/password/escapepwd

在線SHA1加密工具:http://tools.jb51.net/password/sha1encode

短鏈(短網(wǎng)址)在線生成工具:http://tools.jb51.net/password/dwzcreate

短鏈(短網(wǎng)址)在線還原工具:http://tools.jb51.net/password/unshorturl

高強(qiáng)度密碼生成器:http://tools.jb51.net/password/CreateStrongPassword

希望本文所述對(duì)大家的PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • PHP JSON格式的中文顯示問(wèn)題解決方法

    PHP JSON格式的中文顯示問(wèn)題解決方法

    這篇文章主要介紹了PHP JSON格式的中文顯示問(wèn)題解決方法,本文總結(jié)了3種解決中文顯示\u開(kāi)頭字符問(wèn)題的方法,需要的朋友可以參考下
    2015-04-04
  • 關(guān)于PHP結(jié)束標(biāo)簽的使用細(xì)節(jié)探討及聯(lián)想

    關(guān)于PHP結(jié)束標(biāo)簽的使用細(xì)節(jié)探討及聯(lián)想

    PHP解析文件時(shí)會(huì)尋找開(kāi)始?php和結(jié)束標(biāo)記?,標(biāo)記告訴PHP開(kāi)始和停止解釋其中的代碼,接下來(lái)將詳細(xì)介紹下PHP結(jié)束標(biāo)簽的使用細(xì)節(jié)感興趣的你可以參考下本文或許可以幫助到你
    2013-03-03
  • PHP正則驗(yàn)證Email的方法

    PHP正則驗(yàn)證Email的方法

    這篇文章主要介紹了PHP正則驗(yàn)證Email的方法,涉及php正則表達(dá)式驗(yàn)證的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • PHP 防注入函數(shù)(格式化數(shù)據(jù))

    PHP 防注入函數(shù)(格式化數(shù)據(jù))

    下面的函數(shù)通過(guò)格式化數(shù)據(jù)的方法實(shí)現(xiàn)數(shù)據(jù)的addslashes,不過(guò)也建議大家參考下discuz的防注入函數(shù)。
    2011-08-08
  • PHP類繼承 extends使用介紹

    PHP類繼承 extends使用介紹

    我們?cè)谖恼轮袨榇蠹以敿?xì)介紹了有關(guān)PHP類繼承 extends的實(shí)現(xiàn)方法,希望對(duì)于新手來(lái)說(shuō)能夠提升他們?cè)赑HP語(yǔ)言編程中的能力
    2014-01-01
  • PHP常見(jiàn)數(shù)組排序方法小結(jié)

    PHP常見(jiàn)數(shù)組排序方法小結(jié)

    這篇文章主要介紹了PHP常見(jiàn)數(shù)組排序方法,結(jié)合實(shí)例形式分析了php數(shù)組排序相關(guān)函數(shù)、根據(jù)數(shù)組鍵名排序、根據(jù)數(shù)組元素排序、自定義排序、多維數(shù)組排序等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • php循環(huán)輸出數(shù)據(jù)庫(kù)內(nèi)容的代碼

    php循環(huán)輸出數(shù)據(jù)庫(kù)內(nèi)容的代碼

    今天書寫php的循環(huán)輸出內(nèi)容,總發(fā)現(xiàn)第一篇不能現(xiàn)實(shí),原來(lái)是用php do while語(yǔ)句,后來(lái)改成while所以出現(xiàn)這個(gè)問(wèn)題,都怪學(xué)藝不精啊,特整理下
    2008-05-05
  • PHP下escape解碼函數(shù)的實(shí)現(xiàn)方法

    PHP下escape解碼函數(shù)的實(shí)現(xiàn)方法

    很多時(shí)候需要用到j(luò)s的escape函數(shù)來(lái)轉(zhuǎn)換中文字符,可是用js轉(zhuǎn)換后的字符怎么用php來(lái)轉(zhuǎn)換回來(lái)呢,下面我就找到了兩個(gè)很實(shí)用的函數(shù)。
    2010-08-08
  • 詳解:——如何將圖片儲(chǔ)存在數(shù)據(jù)庫(kù)里

    詳解:——如何將圖片儲(chǔ)存在數(shù)據(jù)庫(kù)里

    詳解:——如何將圖片儲(chǔ)存在數(shù)據(jù)庫(kù)里...
    2006-12-12
  • PHP+HTML實(shí)現(xiàn)流式輸出效果的示例詳解

    PHP+HTML實(shí)現(xiàn)流式輸出效果的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用PHP+HTML實(shí)現(xiàn)流式輸出效果的相關(guān)方法,即仿DeepSeek等對(duì)話式AI效果,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04

最新評(píng)論

缙云县| 北宁市| 沈丘县| 平泉县| 青铜峡市| 谷城县| 玉门市| 东乡| 思茅市| 措美县| 龙门县| 固镇县| 吉木乃县| 精河县| 长沙市| 平遥县| 城步| 西乌珠穆沁旗| 中江县| 孝义市| 读书| 邹平县| 汝阳县| 德阳市| 四会市| 西吉县| 安福县| 政和县| 易门县| 宜兰县| 华蓥市| 邓州市| 弋阳县| 新疆| 汝城县| 海丰县| 凌源市| 宁武县| 普兰县| 潜江市| 八宿县|