php基於mcrypt的加密解密例項

2022-10-06 07:30:10 字數 3107 閱讀 6918

php中自帶了相當多的加密的方法,這裡我們來看一下mcrypt擴充套件的使用方式。也是在工作中需要用這個東西加密訪問使用者的cookie的值,認真的學習了這個方面的內容。

1.簡介

mcrypt是php的乙個擴充套件,完成了常用加密演算法的封裝。其實該擴充套件是對mcrypt標準類庫的封裝,mcrypt完成了相當多的常用加密演算法,如des, tripledes, blowfish (default), 3-way, safer-sk64, safer-sk128, twofish, tea, rc2 和 gost加密演算法,並且提供了cbc、ofb、cfb 和 ecb 四種塊加密的模型。

2.安裝和使用

要使用該擴充套件,必須首先安裝mcrypt標準類庫,可以在 **。該擴充套件的編譯和安裝方式和常規的php擴充套件相同,不在詳細說明了。

3.四種塊加密模型

mcrypt支援四種塊加密模型,簡要說明如下:

①. mcrypt_mode_ecb(electronic codebook) 適合對小數量隨機資料的加密,比如加密使用者的登入密碼之類的。

②. mcrypt_mode_cbc (cipher block chaining) 適合加密安全等級較高的重要檔案型別。

③. mcrypt_mode_cfb (cipher feedback) 適合於需要對資料流的每乙個位元組進行加密的場合。

④. mcrypt_mode_ofb (output feedback, in 8bit) 和cfb模式相容,但比cfb模式更安全。cfb模式會引起加密的錯誤擴散,如果乙個byte出錯,則其後續的所有byte都會出錯。ofb模式則不會有此問題。但該模式的安全度不是很高,不建議使用。

⑤. mcrypt_mode_nofb (output feedback, in nbit) 和ofb相容,由於採用了塊操作演算法,安全度更高。

⑥. mcrypt_mode_stream 是為了wake或者rc4等流加密演算法提供的額外模型。

nofb和stream僅當mycrypt的版本號大於等於libmcrypt-2.4.x才有效。(現在基本上都是大於這個版本了,libmcrypt的最新主版本已經到4了)

4.檢視支援的演算法和模型

①. mcrypt_list_modes()列出當前環境支援的模型

②. mcrypt_list_algorithms()列出當前環境支援的演算法

如命令列執行:

複製** **如下:

php -r "var_dump(mcrypt_list_modes()); var_dump(mcrypt_list_algorithms());"

即可列出所有的結果。

5.如何使用

示例1:

複製** **如下:

<?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);

?>

最簡單的方式如示例1中所示,該方法表明對$input使用3des的演算法進行加密,加密金鑰是$key.不過這中直接呼叫的方法已經不被官方推薦使用,也建議大家在開發中不要使用此種方式,不一定哪天該方法就不能用了。在php5下使用此種方式呼叫時,能看到一條warning資訊,提示「php warning: attempt to use an empty iv, which is not recommend」。

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

示例2:

複製** **如下:

<?php

$key = "this is a secret key";

$inpayafkljptut = "let us meet at 9 o'clock at the secret place.";

// 開啟mcrypt,或者mcrypt型別的資源物件,該物件使用ecb模式,使用3des作為加密演算法。

$td = mcrypt_module_open('tripledes', '', 'ecb', '');

// 建立iv(初始化向量)

$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), mcrypt_rand);

// 根據金鑰和iv初始化$td,完成記憶體分配等初始化工作

mcrypt_generic_init($td, $key, $iv);

// 進行加密

$encrypted_data = mcrypt_generic($td, $input);

// 反初始化$td,釋放資源

mcrypt_generic_deinit($td);

// 關閉資源物件,退出

mcrypt_module_close($td);

?>

上述過程完成了資料的加密過程。首先選擇加密演算法和加密模式建立mcrypt的資源物件和iv,然後初始化加密所需的buffer(記憶體),進行加密後再釋放buffer,最後關閉資源物件。

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

6. 有關iv

不是所有的模型中都需要iv. cfb和ofb是必須有iv, cbc和ebc則是可選的。對於必選iv的模式來說,其加密和解密的iv的值必須完全相同,cbc和ebc則無此要求。可以相同也可以不同,沒什麼關係。

7.乙個簡單功能的加密解密類

複製** **如下:

class ampcrypt

public static function encrypt($value)

public static function dencrypt($value)

}ps:關於加密技術,本站還提供程式設計客棧了如下加密工具供大家參考使用:

md5**加密工具:

escape加密/解密工具:

**sha1加密工具:

短鏈(短**)**生成工具:

高強度密碼生成器:

本文標題: php基於mcrypt的加密解密例項

本文位址:

PHP加密擴充套件庫Mcrypt

php程式設計師們在編寫 程式時,除了要保證 的高效能之外,還有一點是非常重要的,那就是程式的安全性保障。php除了自帶的幾種加密函式外,還有功能更全面的php加密擴充套件庫mcrypt和mhash。其中,mcrypt擴充套件庫可以實現加密解密功能,就是既能將明文加密,也可以密文還原。1.php加密...

PHP檔案加密解

公鑰加密 param string 明文 param string 證書檔案 crt return string 密文 base64編碼 function publickey encodeing sourcestr,filename 私鑰解密 param string 密文 二進位制格式且base6...

PHP加密擴充套件庫Mcrypt安裝和例項

php加密擴充套件庫有mcrypt和mhash,其中,mcrypt擴充套件庫可以實現加密解密功能,今天我我們講的就是mcrypt的功能和例項 mcrypt簡單介紹 php程式設計師們在編寫 程式時,除了要保證 的高效能之外,還有一點是非常重要的,那就是程式的安全性保障。php除了自帶的幾種加密函式外...