国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

PHP數據加密

PHP數據加密

更新時間:2022-04-29 文章作者:未知 信息來源:網絡 閱讀次數:

數據加密在我們生活中的地位已經越來越重要了,尤其是考慮到在網絡上發生的大量 交易和傳輸的大量數據。如果對于采用安全措施有興趣的話,也一定會有興趣了解PHP提供的一系列安全功能。在本篇文章中,我們將介紹這些 功能,提供一些基本的用法,以便你能夠為自己的應用軟件中增加安全功能。


預備知識

在詳細介紹PHP的安全功能之 前,我們需要花點時間來向沒有接觸過這方面內容的讀者介紹一些有關密碼學的基本知識,如果對密碼學的基本概念已經非常熟悉,就可以跳 過去這一部分。

密碼學可以通俗地被描述為對加/解密的研究和實驗,加密是將易懂的資料轉換為不易懂資料的過程,解密 則是將不易懂的資料轉換為原來易懂資料的過程。不易懂的資料被稱作密碼,易懂的資料被稱作明碼。

數據的加/解密都需 要一定的算法,這些算法可以非常地簡單,如著名的凱撒碼,但當前的加密算法要相對復雜得多,其中一些利用現有的方法甚至是無法破譯的 。


PHP的加密功能

只要有一點使用非Windows平臺經驗的人可能對crypt()也相當熟悉,這一函數完成被稱作單向加密 的功能,它可以加密一些明碼,但不能夠將密碼轉換為原來的明碼。盡管從表面上來看這似乎是一個沒有什么用處的功能,但它的確被廣泛用 來保證系統密碼的完整性。因為,單向加密的口令一旦落入第三方人的手里,由于不能被還原為明文,因此也沒有什么大用處。在驗證用戶輸 入的口令時,用戶的輸入采用的也是單向算法,如果輸入與存儲的經加密后的口令相匹配,則輸入的口信一定是正確的。

PHP同樣提供了使用其crypt()函數完成單向加密功能的可能性。我將在這里簡要地介紹該函數:

string crypt (string input_string [, string salt])

其中的input_string參數是需要加密的字符串,第二個可選的salt是一個位字串,它能夠影響 加密的暗碼,進一步地排除被稱作預計算攻擊的可能性。缺省情況下,PHP使用一個2個字符的DES干擾串,如果你的系統使用的是MD5(我將在 以后介紹MD5算法),它會使用一個12個字符的干擾串。順便說一下,可以通過執行下面的命令發現系統將要使用的干擾串的長度:

print "My system salt size is: ". CRYPT_SALT_LENGTH;
系統也可能支持其他的加密算法。crypt()支持四 種算法,下面是它支持的算法和相應的salt參數的長度:

算法      Salt長度
CRYPT_STD_DES 2-character (Default)
CRYPT_EXT_DES 9-character
CRYPT_MD5   12-character beginning with $1$
CRYPT_BLOWFISH 16-character beginning with $2$


用crypt()實現用戶身份驗證

作為crypt()函數的一個例子,考慮這樣一種情況,你希望創建一段PHP腳本程序限 制對一個目錄的訪問,只允許能夠提供正確的用戶名和口令的用戶訪問這一目錄。我將把資料存儲在我喜歡的數據庫MySQL的一個表中。下面我 們以創建這個被稱作members的表開始我們的例子:

mysql>CREATE TABLE members (
->username CHAR(14) NOT NULL,
->password CHAR(32) NOT NULL,
->PRIMARY KEY(username)
->);

然后,我們假定下面的數據已經存儲在該表中:

用戶名 密碼
clark keloD1C377lKE
bruce ba1T7vnz9AWgk
peter paLUvRWsRLZ4U

這些加密的口令對應的明碼分別是kent、banner和parker。注意一下每個口令的前二個字母, 這是因為我使用了下面的代碼,根據口令的前二個字母創建干擾串的:

$enteredPassword.
$salt = substr($enteredPassword, 0, 2);
$userPswd = crypt($enteredPassword, $salt);
// $userPswd然后就和用戶名一起存儲在MySQL 中

我將使用Apache的口令-應答認證配置提示用戶輸入用戶名和口令,一個鮮為人知的有關PHP的信息是,它可以把Apache 的口令-應答系統輸入的用戶名和口令識別為$PHP_AUTH_USER和$PHP_AUTH_PW,我將在身份驗證腳本中用到這二個變量;ㄒ恍⿻r間仔細閱讀下 面的腳本,多注意一下其中的解釋,以便更好地理解下面的代碼:

crypt()和Apache的口令-應答驗證系統的應用

$host = "localhost";
$user = "zorro";
$pswd = "hell odolly";
$db = "users";

// Set authorization to False

$authorization = 0;

// Verify that user has entered username and password

if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)) :

mysql_pconnect($host, $user, $pswd) or die("Can\'t connect to MySQL
server!");

mysql_select_db($db) or die("Can\'t select database!");

// Perform the encryption
$salt = substr($PHP_AUTH_PW, 0, 2);
$encrypted_pswd = crypt($PHP_AUTH_PW, $salt);

// Build the query

$query = "SELECT username FROM members WHERE
username = \'$PHP_AUTH_USER\' AND
password = \'$encrypted_pswd\'";

// Execute the query

if (mysql_numrows(mysql_query($query)) == 1) :
$authorization = 1;
endif;

endif;

// confirm authorization

if (! $authorization) :

header(\'WWW-Authenticate: Basic realm="Private"\');
header(\'HTTP/1.0 401 Unauthorized\');
print "You are unauthorized to enter this area.";
exit;

else :

print "This is the secret data!";

endif;

?>

上面就是一個核實用戶訪問權限的簡單身份驗證系統。在使用crypt()保護重要的機密資料時,記住在缺省狀態下使用的 crypt()并不是最安全的,只能用在對安全性要求較低的系統中,如果需要較高的安全性能,就需要我在本篇文章的后面介紹的算法。

下面我將介紹另一個PHP支持的函數━━md5(),這一函數使用MD5散列算法,它有幾種很有趣的用法值得一提:


混編

一個混編函數可以將一個可變長度的信息變換為具有固定長度被混編過的輸出,也被稱作“信息文摘”。這是十分有用的,因為 一個固定長度的字符串可以用來檢查文件的完整性和驗證數字簽名以及用戶身份驗證。由于它適合于PHP,PHP內置的md5()混編函數將把一個可 變長度的信息轉換為128位(32個字符)的信息文摘。混編的一個有趣的特點是不能通過分析混編后的信息得到原來的明碼,因為混編后的結果 與原來的明碼內容沒有依賴關系。 即便只改變一個字符串中的一個字符,也將使得MD5混編算法計算出二個截然不同的結果。我們首先來看下 表的內容及其相應的結果:

 
使用md5()混編字符串

$msg = "This is some message that I just wrote";
$enc_msg = md5($msg);
print "hash: $enc_msg ";
?>

結果:

hash: 81ea092649ca32b5ba375e81d8f4972c
注意,結果的長度為32個字符。再來看一下下面的表,其中的$msg的值有了一點 微小的變化:

使用md5()對一個稍微變化的字符串進行混編

//注意,message中少了一個s
$msg = "This is some mesage that I just wrote";
$enc_msg = md5($msg);
print "hash2: $enc_msg

";
?>

結果:

hash2: e86cf511bd5490d46d5cd61738c82c0c
可以 發現,盡管二個結果的長度都是32個字符,但明文中一點微小的變化使得結果發生了很大的變化,因此,混編和md5()函數是檢查數據中微小變 化的一個很好的工具。

盡管crypt()和md5()各有用處,但二者在功能上都受到一定的限制。在下面的部分中,我們將介紹 二個非常有用的被稱作Mcrypt和Mhash的PHP擴展,將大大拓展PHP用戶在加密方面的選擇。

盡管我們在上面的小節中說明了 單向加密的重要性,但有時我們可能需要在加密后,再把密碼數據還原成原來的數據,幸運的是,PHP通過Mcrypt擴展庫的形式提供了這種可能 性。

Mcrypt
Mcrypt 2.5.7 Unix | Win32
Mcrypt 2.4.7是一個功能強大的加密算法擴展庫,它包括有22種算法 ,其中就包括下面的幾種算法:

Blowfish RC2 Safer-sk64 xtea
Cast-256 RC4 Safer-sk128
DES RC4-iv Serpent
Enigma Rijndael-128 Threeway
Gost Rijndael-192 TripleDES
LOKI97 Rijndael-256 Twofish
PanamaSaferplus Wake

安裝:

在標準的PHP軟件包中不包括Mcrypt,因此需要下載它,下載的地址為:ftp://argeas.cs-net.gr/pub/unix/mcrypt/ 。下載后,按照下面的方法進行編譯,并把它擴充在PHP中:

下載Mcrypt軟件包。
gunzipmcrypt-x.x.x.tar.gz
tar -xvfmcrypt-x.x.x.tar
./configure --disable-posix-threads
make
make install
cd to your PHP directory.
./configure -with-mcrypt=[dir] [--other-configuration-directives]
make
make install

當然了,根據你的 要求和PHP安裝時與互聯網服務器軟件的關系,上面的過程可能需要作適當的修改。


使用Mcrypt

Mcrypt的優點不僅僅 在于其提供的加密算法較多,還在于它可以對數據進行加/解密處理,此外,它還提供了35種處理數據用的函數。盡管對這些函數進行詳細介紹 已經超出了這篇文章的范圍,我還是要就幾個典型的函數作一下簡要的介紹。

首先,我將介紹如何使用Mcrypt擴展庫對數 據進行加密,然后再介紹如何使用它進行解密。下面的代碼對這一過程進行了演示,首先是對數據進行加密,然后在瀏覽器上顯示加密后的數 據,并將加密后的數據還原為原來的字符串,將它顯示在瀏覽器上。

使用Mcrypt對數據進行加、解密


// Designate string to be encrypted
$string = "Applied Cryptography, by Bruce Schneier, is
a wonderful cryptography reference.";

// Encryption/decryption key
$key = "Four score and twenty years ago";

// Encryption Algorithm
$cipher_alg = MCRYPT_RIJNDAEL_128;

// Create the initialization vector for added security.
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,
MCRYPT_MODE_ECB), MCRYPT_RAND);

// Output original string
print "Original string: $string
";

// Encrypt $string
$encrypted_string = mcrypt_encrypt($cipher_alg, $key,
$string, MCRYPT_MODE_CBC, $iv);

// Convert to hexadecimal and output to browser
print "Encrypted string: ".bin2hex($encrypted_string)."

";
$decrypted_string = mcrypt_decrypt($cipher_alg, $key,
$encrypted_string, MCRYPT_MODE_CBC, $iv);

print "Decrypted string: $decrypted_string";

?>

執行上面的腳本將會產生下面的輸出:

Original string: Applied Cryptography, by Bruce Schneier, is a wonderful cryptography reference.

Encrypted string: 02a7c58b1ebd22a9523468694b091e60411cc4dea8652bb8072 34fa06bbfb20e71ecf525f29df58e28f3d9bf541f7ebcecf62b c89fde4d8e7ba1e6cc9ea24850478c11742f5cfa1d23fe22fe8 bfbab5e

Decrypted string: Applied Cryptography, by Bruce Schneier, is a wonderful cryptography reference.

上面的代碼中二個最典型的函數是mcrypt_encrypt()和 mcrypt_decrypt(),它們的用途是顯而易見的。我使用了“電報密碼本”模式,Mcrypt提供了幾種加密方式,由于每種加密方式都有可以影響 密碼安全的特定字符,因此每種模式都需要了解。對于沒有接觸過密碼系統的讀者來說,可能對mcrypt_create_iv()函數更有興趣,盡管對這 一函數進行徹底的解釋已經超出了本篇文章的范圍,但我仍然會提到它創建的初始化向量(hence, iv),這一向量可以使每條信息彼此獨立。 盡管不是所有的模式都需要這一初始化變量,但如果在要求的模式中沒有提供這一變量,PHP就會給出警告信息。


Mhash擴展庫

http://sourceforge.net/projects/mhash/

0.8.3版的Mhash擴展庫支持12種混編算法,仔細檢查Mhash v.0.8.3的頭文件mhash.h可以知道,它支持下面的混編算法:

CRC32 HAVAL160 MD5
CRC32B HAVAL192 RIPEMD160
GOST HAVAL224 SHA1
HAVAL128 HAVAL256 TIGER

安裝

象Mcrypt一 樣,Mhash也沒有包括在PHP軟件包中,對于非Windows用戶而言,下面是安裝過程:

下載Mhash擴展庫
gunzipmhash-x.x.x.tar.gz
tar -xvfmhash-x.x.x.tar
./configure
make
make install
cd
./configure -with-mhash=[dir] [--other-configuration-directives]
make
make install
象Mcrypt一樣 ,根據PHP在互聯網服務器軟件上的安裝方式,可能需要對Mhash進行其他的配置。

對于Windows用戶而言, http://www.php4win.de中有一個很好的包括Mhash擴展庫在內的PHP軟件包。只要下載并進行解壓縮,然后根據其中的readme.first文檔中的指 令進行安裝即可。


使用Mhash

對信息進行混編非常簡單,看一下下面的例子:

$hash_alg = MHASH_TIGER;
$message = "These are the directions to the secret fort. Two steps left, three steps right, and cha chacha.";
$hashed_message = mhash($hash_alg, $message);
print "The hashed message is ". bin2hex($hashed_message);
?>

執行這一段腳本程序將得到下面的輸出結果:

The hashed message is 07a92a4db3a4177f19ec9034ae5400eb60d1a9fbb4ade461
在這里使用bin2hex()函數的目的是方便我們理解$hashed_message 的輸出,這是因為混編的結果是二進制格式,為了能夠將它轉化為易于理解的格式,必須將它轉換為十六進制格式。

需要 注意的是,混編是單向功能,其結果不依賴輸入,因此可以公開顯示這一信息。這一策略通常用于讓用戶比較下載文件和系統管理員提供的文 件,以確保文件的完整性。

Mhash還有其他一些有用的函數。例如,我需要輸出一個Mhash支持的算法的名字,由于 Mhash支持的所有算法的名字都以MHASH_開頭,因此,可以通過執行如下的代碼完成這一任務:

$hash_alg = MHASH_TIGER;
print "This data has been hashed with the".mhash_get_hash_name($hashed_message)."hashing algorithm.";
?>

得到的輸出是:

This data has been hashed with the TIGER hashing algorithm.
關于PHP和加密最后需要注意的一個問題
關于PHP和加密需要注意的最后的一個重要問題是在服務器和客戶端之間傳輸的數據 在傳輸過程中是不安全的!PHP是一種服務器端技術,不能阻止數據在傳輸過程中泄密。因此,如果想實現一個完整的安全應用,建議選用 Apache-SSL或其他的安全服務器布置。


結論

這篇文章介紹了PHP最有用的功能之一━━數據加密,不僅討論了PHP內置 的crypt() 和md5()加密函數,還討論了用于數據加密的功能強大的擴展庫━━Mcrypt和Mhash。在這篇文章最后,我需要指出的是,一個真正 安全的PHP應用還應該包括安全的服務器,由于PHP是一種服務器端的技術,因此,在數據由客戶端向服務器端進行傳輸時,它不能保證數據的安全。

來源: 瑞星

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        欧美精品一二三四| 亚洲国产精品久久人人爱| 精品国产91久久久久久久妲己| 国产精品久久久久影院| 成人小视频免费观看| 久久精品人人爽人人爽| 国产成人精品一区二| 国产精品久久久久aaaa樱花| 成人少妇影院yyyy| 亚洲男人的天堂在线aⅴ视频| 一本久久a久久精品亚洲| 五月天久久比比资源色| 欧美一区二区三区免费大片| 天天操天天干天天综合网| 精品国产不卡一区二区三区| 国产一区日韩二区欧美三区| 亚洲欧洲日韩av| 欧美精品自拍偷拍| 99精品欧美一区二区三区小说 | 亚洲午夜电影在线观看| 7777精品伊人久久久大香线蕉经典版下载| 蜜臀av性久久久久蜜臀av麻豆| 国产性做久久久久久| 欧美午夜精品理论片a级按摩| 久久99久久久久| 亚洲va欧美va人人爽| 国产清纯白嫩初高生在线观看91 | 91精品一区二区三区久久久久久| 美国毛片一区二区三区| 亚洲综合色自拍一区| 中文字幕的久久| 欧美国产成人精品| 久久久蜜臀国产一区二区| 91精品国产美女浴室洗澡无遮挡| 91免费国产视频网站| av成人免费在线观看| 国产91精品久久久久久久网曝门| 麻豆传媒一区二区三区| 天天影视涩香欲综合网| 日韩制服丝袜先锋影音| 日韩电影在线一区二区| 麻豆精品在线播放| 国产麻豆欧美日韩一区| 91视频观看视频| 欧美日韩一区在线观看| 日韩精品一区二区三区在线观看 | 国产麻豆成人精品| 国产91精品一区二区麻豆亚洲| 国产xxx精品视频大全| av中文字幕不卡| 欧美午夜电影在线播放| 精品国产乱码久久| 亚洲精品视频在线看| 麻豆精品视频在线观看视频| 国产精品亚洲第一| 91福利国产精品| 中文字幕中文字幕一区二区| 亚洲电影在线播放| 不卡av在线网| 久久理论电影网| 日韩激情视频网站| 色婷婷激情一区二区三区| 久久久99精品久久| 日本欧美大码aⅴ在线播放| 国产98色在线|日韩| 日韩一级片在线播放| 偷拍一区二区三区四区| 在线视频中文字幕一区二区| 国产亚洲综合在线| 国产一区二区三区在线观看免费| 欧美日本乱大交xxxxx| 亚洲女爱视频在线| 欧美午夜精品理论片a级按摩| 中文字幕中文字幕一区| jizz一区二区| 亚洲午夜激情网站| 91精品国产手机| 麻豆国产欧美一区二区三区| 2019国产精品| 成人禁用看黄a在线| 亚洲欧美在线aaa| 欧美精品在线观看播放| 国内精品视频一区二区三区八戒| 2023国产一二三区日本精品2022| 国产精品白丝av| 亚洲人成在线观看一区二区| 欧美精品亚洲一区二区在线播放| 日日欢夜夜爽一区| 日本一区二区三区免费乱视频| 91啪在线观看| 九九精品视频在线看| 国产精品国产三级国产有无不卡| 欧美日韩一区二区电影| 国产91色综合久久免费分享| 亚洲电影一级黄| 国产精品理论片在线观看| 日韩视频一区在线观看| 欧美色网站导航| 国产一区二区在线电影| 日韩一区精品视频| 亚洲成人综合在线| 亚洲免费观看高清| 国产精品污网站| 国产亚洲欧美在线| 日韩欧美123| 日韩欧美一区二区不卡| 欧美视频一区在线观看| 欧美艳星brazzers| 一本色道久久综合亚洲aⅴ蜜桃| 久久99精品久久久久久| 青青青伊人色综合久久| 日韩高清在线电影| 美洲天堂一区二卡三卡四卡视频| 亚洲激情五月婷婷| 成人免费在线播放视频| 亚洲免费观看高清完整| 日韩毛片在线免费观看| 亚洲男人的天堂av| 日韩av一二三| 福利电影一区二区三区| 日本道色综合久久| 欧美日韩大陆一区二区| 久久品道一品道久久精品| 国产欧美精品一区aⅴ影院| 中文字幕一区日韩精品欧美| 亚洲黄色av一区| 国产成人精品三级| 69堂成人精品免费视频| 久久精品一区八戒影视| 樱花影视一区二区| 免费亚洲电影在线| jiyouzz国产精品久久| 51精品国自产在线| 亚洲精品视频免费看| 黄色成人免费在线| 精品1区2区3区| 中文字幕在线视频一区| 看片网站欧美日韩| 欧美一区二区三区免费观看视频 | 国产清纯在线一区二区www| 日韩美女视频一区二区 | 欧美午夜精品久久久| 中文字幕不卡的av| 国产麻豆精品在线| 久久免费精品国产久精品久久久久| 国产精品二区一区二区aⅴ污介绍| 日一区二区三区| 欧美撒尿777hd撒尿| 亚洲一区二区视频| 色综合久久综合中文综合网| 久久久久久久久久久久久久久99| 麻豆精品精品国产自在97香蕉| 91精品国产91久久综合桃花| 美女网站一区二区| 精品免费视频一区二区| 国产一区二区三区四区五区美女 | 欧美一区二区三区视频在线观看| 亚洲精品国产第一综合99久久 | 国产亚洲制服色| 国产高清精品在线| 中文字幕中文字幕中文字幕亚洲无线| 97国产一区二区| 午夜视黄欧洲亚洲| 久久久精品黄色| 99在线热播精品免费| 无码av免费一区二区三区试看| 欧美不卡激情三级在线观看| 不卡免费追剧大全电视剧网站| 亚洲福利电影网| 国产精品视频麻豆| 欧美久久久久中文字幕| 国产精品99久久久| 亚洲va韩国va欧美va| 国产精品丝袜91| 精品国产露脸精彩对白| 在线成人小视频| 91在线小视频| 国产成人无遮挡在线视频| 日韩精品一区第一页| 亚洲国产你懂的| 中文字幕一区av| 中文字幕一区二区三区乱码在线 | 亚洲国产视频一区| 日本一区二区电影| 国产片一区二区| 中文字幕免费不卡在线| 国产视频一区在线播放| 日韩精品一区二区三区中文精品| 欧美日韩国产首页在线观看| 欧美午夜一区二区三区| 色av成人天堂桃色av| 欧美日韩精品高清| 91精品国产91久久久久久一区二区| 欧美浪妇xxxx高跟鞋交| 日韩欧美一卡二卡| 国产肉丝袜一区二区| 亚洲欧洲www| 日日摸夜夜添夜夜添国产精品| 久久国产精品99精品国产 | 欧美日韩精品一区二区三区蜜桃 |