日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP安全-加密

瀏覽:176日期:2022-09-11 17:36:02
加密

作為一本相關(guān)安全方面的書(shū),通常加密是需要提及的話題。我之所以在本書(shū)的主體部分忽略了加密問(wèn)題,是因?yàn)樗挠猛臼仟M窄的,而開(kāi)發(fā)者應(yīng)從大處著眼來(lái)考慮安全問(wèn)題。過(guò)分依賴于加密常常會(huì)混淆問(wèn)題的根源。盡管加密本身是有效的,但是進(jìn)行加密并不會(huì)神奇地提高一個(gè)應(yīng)用的安全性。

一個(gè)PHP開(kāi)發(fā)人員應(yīng)主要熟悉以下的加密方式:

l對(duì)稱加密

l非對(duì)稱加密(公鑰)

lHash函數(shù)(信息摘要)

l信息驗(yàn)證碼

本附錄主要關(guān)注于使用mcrypt擴(kuò)展的對(duì)稱加密算法。你需要參考的資料如下:

實(shí)用加密技術(shù)(Applied Cryptography), by Bruce Schneier (Wiley)

http://www.schneier.com/blog/

http://wikipedia.org/wiki/Cryptography

http://phpsec.org/articles/2005/password-hashing.html

http://pear.php.net/package/Crypt_HMAC

http://pear.php.net/package/Crypt_RSA

C.1. 密碼的存儲(chǔ)

當(dāng)你在數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的密碼時(shí),永遠(yuǎn)不要以明碼方式存入,而是應(yīng)該存儲(chǔ)密碼的hash值并同時(shí)使用附加字串:

<?php

/* $password contains the password. */

$salt = ’SHIFLETT’;

$password_hash = md5($salt . md5($password . $salt));

/* Store password hash. */

?>

當(dāng)你需要確認(rèn)一個(gè)密碼是否正確時(shí),以同樣的方式計(jì)算出hash值并比較異同:

<?php

$salt = ’SHIFLETT’;

$password_hash = md5($salt . md5($_POST[’password’] . $salt));

/* Compare password hashes. */

?>

如果hash值完全相同,你就有理由認(rèn)為密碼也是相同的。

如果使用了這個(gè)技巧,是不可能告訴用戶他們的密碼是什么的。當(dāng)用戶忘記密碼時(shí),你只能讓他錄入一個(gè)新密碼并重新計(jì)算hash值存入數(shù)據(jù)庫(kù)。當(dāng)然,你需要非常小心地對(duì)用戶進(jìn)行身份確認(rèn)——密碼提醒機(jī)制是易受頻繁攻擊的目標(biāo),同時(shí)也是經(jīng)常出現(xiàn)安全漏洞的源頭。

C.2. 使用mcrypt

PHP的標(biāo)準(zhǔn)加密擴(kuò)展是mcrypt,它支持很多不同的加密算法。你可以通過(guò)mcrypt_list_algorithms( )函數(shù)來(lái)查看你的平臺(tái)上支持的算法列表:

<?php

echo ’<pre>’ . print_r(mcrypt_list_algorithms(), TRUE) . ’</pre>’;

?>

加密和解密分別由mcrypt_encrypt( ) 及 mcrypt_decrypt( )函數(shù)來(lái)實(shí)現(xiàn)。這兩個(gè)函數(shù)都有5個(gè)參數(shù),第一個(gè)參數(shù)是用于指定使用的算法:

<?php

mcrypt_encrypt($algorithm,

$key,

$cleartext,

$mode,

$iv);

mcrypt_decrypt($algorithm,

$key,

$ciphertext,

$mode,

$iv);

?>

其中的加密鍵(第二個(gè)參數(shù))是非常敏感的數(shù)據(jù),因此你要確保把它存放在安全的地方??梢杂玫诎苏轮斜Wo(hù)數(shù)據(jù)庫(kù)權(quán)限的方法來(lái)保護(hù)加密鍵。如果經(jīng)濟(jì)條件允許的話,硬件加密鍵是最好的選擇,它提供了超級(jí)強(qiáng)大的安全性。

函數(shù)有多種模式可供選擇,你可以使用mcrypt_list_modes( )來(lái)列出所有支持的模式:

<?php

echo ’<pre>’ . print_r(mcrypt_list_modes(), TRUE) . ’</pre>’;

?>

第五個(gè)參數(shù)($iv)為初始化向量,可以使用mcrypt_create_iv( )函數(shù)建立。

下面的示例類(lèi)提供了基本的加密解密方法:

class crypt

{

private $algorithm;

private $mode;

private $random_source;

public $cleartext;

public $ciphertext;

public $iv;

public function __construct($algorithm = MCRYPT_BLOWFISH,

$mode = MCRYPT_MODE_CBC,

$random_source = MCRYPT_DEV_URANDOM)

{

$this->algorithm = $algorithm;

$this->mode = $mode;

$this->random_source = $random_source;

}

public function generate_iv()

{

$this->iv = mcrypt_create_iv(mcrypt_get_iv_size($this->algorithm,

$this->mode), $this->random_source);

}

public function encrypt()

{

$this->ciphertext = mcrypt_encrypt($this->algorithm,

$_SERVER[’CRYPT_KEY’], $this->cleartext, $this->mode, $this->iv);

}

public function decrypt()

{

$this->cleartext = mcrypt_decrypt($this->algorithm,

$_SERVER[’CRYPT_KEY’], $this->ciphertext, $this->mode, $this->iv);

}

}

?>

上面的類(lèi)會(huì)在其它示例中使用,下面是它的使用方法示例:

<?php

$crypt = new crypt();

$crypt->cleartext = ’This is a string’;

$crypt->generate_iv();

$crypt->encrypt();

$ciphertext = base64_encode($crypt->ciphertext);

$iv = base64_encode($crypt->iv);

unset($crypt);

/* Store $ciphertext and $iv (initialization vector). */

$ciphertext = base64_decode($ciphertext);

$iv = base64_decode($iv);

$crypt = new crypt();

$crypt->iv = $iv;

$crypt->ciphertext = $ciphertext;

$crypt->decrypt();

$cleartext = $crypt->cleartext;

?>

小提示

本擴(kuò)展要求你在編譯PHP時(shí)使用-mcrypt標(biāo)識(shí)。安裝指南及要求詳見(jiàn)http://php.net/mcrypt。

C.3. 信用卡號(hào)的保存

我常常被問(wèn)到如何安全地保存信用卡號(hào)。我的總是會(huì)首先詢問(wèn)他們是否確實(shí)有必要保存信用卡號(hào)。畢竟不管具體是如何操作的,引入不必要的風(fēng)險(xiǎn)是不明智的。同時(shí)國(guó)家法律還有關(guān)于信用卡信息處理方面的規(guī)定,我還時(shí)刻小心地提醒我并不是一個(gè)法律專家。

本書(shū)中我并不會(huì)專門(mén)討論信用卡處理的方法,而是會(huì)說(shuō)明如何保存加密信息到數(shù)據(jù)庫(kù)及在讀取時(shí)解密。該流程會(huì)導(dǎo)致系統(tǒng)性能的下降,但是確實(shí)提供了一層保護(hù)措施。其主要優(yōu)點(diǎn)是如果數(shù)據(jù)庫(kù)內(nèi)容泄密暴露出的只是加密信息,但是前提是加密鍵是安全的。因此,加密鍵與加密的實(shí)現(xiàn)方法本身同樣重要。

保存加密數(shù)據(jù)到數(shù)據(jù)的過(guò)程是,首先加密數(shù)據(jù),然后通過(guò)初始向量與明文建立密文來(lái)保存到數(shù)據(jù)庫(kù)。由于密文是二進(jìn)制字符串,還需要通過(guò)base64_encode( )轉(zhuǎn)換成普通文本字符串以保證二進(jìn)制編碼的安全存儲(chǔ)。

<?php

$crypt = new crypt();

$crypt->cleartext = ’1234567890123456’;

$crypt->generate_iv();

$crypt->encrypt();

$ciphertext = $crypt->ciphertext;

$iv = $crypt->iv;

$string = base64_encode($iv . $ciphertext);

?>

保存該字串至數(shù)據(jù)庫(kù)。在讀取時(shí),則是上面流程的逆處理:

<?php

$string = base64_decode($string);

$iv_size = mcrypt_get_iv_size($algorithm, $mode);

$ciphertext = substr($string, $iv_size);

$iv = substr($string, 0, $iv_size);

$crypt = new crypt();

$crypt->iv = $iv;

$crypt->ciphertext = $ciphertext;

$crypt->decrypt();

$cleartext = $crypt->cleartext;

?>

本實(shí)現(xiàn)方法假定加密算法與模式不變。如果它們是不定的話,你還要保存它們以用于解密數(shù)據(jù)。加密鍵是唯一需要保密的數(shù)據(jù)。

C.4. 加密會(huì)話數(shù)據(jù)

如果你的數(shù)據(jù)庫(kù)存在安全問(wèn)題,或者部分保存在會(huì)話中的數(shù)據(jù)是敏感的,你可能希望加密會(huì)話數(shù)據(jù)。除非很有必要,一般我不推薦這樣做,但是如果你覺(jué)得在你的情形下需要這樣做的話,本節(jié)提供了一個(gè)實(shí)現(xiàn)方法的示例。

這個(gè)方案十分簡(jiǎn)單。實(shí)際上,在第八章中,已經(jīng)說(shuō)明了如何通過(guò)調(diào)用session_set_save_handler( )來(lái)執(zhí)行你自己的會(huì)話機(jī)制。通過(guò)對(duì)保存和讀取數(shù)據(jù)的函數(shù)的少量調(diào)整,你就能加密存入數(shù)據(jù)庫(kù)的數(shù)據(jù)及在讀取時(shí)解密數(shù)據(jù):

<?php

function _read($id)

{

global $_sess_db;

$algorithm = MCRYPT_BLOWFISH;

$mode = MCRYPT_MODE_CBC;

$id = mysql_real_escape_string($id);

$sql = 'SELECT data

FROM sessions

WHERE id = ’$id’';

if ($result = mysql_query($sql, $_sess_db))

{

$record = mysql_fetch_assoc($result);

$data = base64_decode($record[’data’]);

$iv_size = mcrypt_get_iv_size($algorithm, $mode);

$ciphertext = substr($data, $iv_size);

$iv = substr($data, 0, $iv_size);

$crypt = new crypt();

$crypt->iv = $iv;

$crypt->ciphertext = $ciphertext;

$crypt->decrypt();

return $crypt->cleartext;

}

return ’’;

}

function _write($id, $data)

{

global $_sess_db;

$access = time();

$crypt = new crypt();

$crypt->cleartext = $data;

$crypt->generate_iv();

$crypt->encrypt();

$ciphertext = $crypt->ciphertext;

$iv = $crypt->iv;

$data = base64_encode($iv . $ciphertext);

$id = mysql_real_escape_string($id);

$access = mysql_real_escape_string($access);

$data = mysql_real_escape_string($data);

$sql = 'REPLACE

INTO sessions

VALUES (’$id’, ’$access’, ’$data’)';

return mysql_query($sql, $_sess_db);

}

標(biāo)簽: PHP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一级二级| 欧美a一区二区| 日韩毛片视频| 日韩欧美精品一区| 91精品国产乱码久久久久久久| 成人欧美一区二区三区的电影| 麻豆网站免费在线观看| 国际精品欧美精品| 亚洲午夜天堂| 伊人久久亚洲热| 亚洲人妖在线| 69堂精品视频在线播放| 久久久国产精品入口麻豆| 久久久久久自在自线| 欧美日韩中文一区二区| 奶水喷射视频一区| 国产情侣一区在线| 日韩精品免费一区二区三区| 鲁大师成人一区二区三区| 日韩av中文字幕一区二区| 国产区精品区| 日韩美女一区二区三区在线观看| 久久亚洲专区| 亚洲1区在线| 国产精品99视频| re久久精品视频| 日韩1区2区3区| av资源亚洲| 免费不卡在线观看| 麻豆91精品91久久久的内涵| 欧美日韩尤物久久| 日日摸夜夜添夜夜添国产精品| 久久av偷拍| 国产毛片久久| 麻豆91精品91久久久的内涵| 九九在线精品| 国产剧情在线观看一区| 亚洲天堂一区二区| 爽好多水快深点欧美视频| 国产亚洲电影| 国产精品99一区二区| 欧美伊人影院| 免费欧美一区| 国内精品麻豆美女在线播放视频| 亚洲一区日韩| 美女福利一区二区三区| 日韩高清电影免费| 久久影院一区| 国产精品18| 男人的天堂久久精品| 97欧美在线视频| 日本午夜精品久久久| 99久久精品费精品国产| 日本成人手机在线| 午夜精品亚洲| 色乱码一区二区三区网站| 一级欧美视频| 91精品啪在线观看国产18| 国产精品亚洲综合久久| 亚洲一区二区动漫| 日韩黄色大片| 你懂的国产精品永久在线| 国产精品毛片| 欧美成人基地 | 蜜臀久久99精品久久久画质超高清| 麻豆国产精品| 日韩高清不卡在线| 亚洲欧美久久久| 日韩高清不卡| 红杏一区二区三区| 欧美有码在线| 亚洲欧洲国产精品一区| 自由日本语亚洲人高潮| 国产精品国产三级国产在线观看| 欧美一区成人| 水野朝阳av一区二区三区| 久久国产中文字幕| www.51av欧美视频| 精品国产aⅴ| 欧美久久一区二区三区| 性色一区二区| 国产亚洲午夜| 欧美精品黄色| 久久久久国产精品一区三寸 | 国产欧美69| 青草国产精品| 亚洲精品无播放器在线播放| 另类av一区二区| 亚洲免费在线| 亚洲欧美一区在线| 欧美成人午夜| 欧美成人综合| 欧美日韩国产免费观看视频| 久久国产成人午夜av影院宅| 日韩三区在线| 国内亚洲精品| 亚洲精品网址| 国产精品毛片在线| 日av在线不卡| 日韩av中文字幕一区二区| 日韩二区在线观看| 久久国产乱子精品免费女| 日韩精品免费视频人成| 日韩国产在线观看| 欧美视频二区| 国产激情精品一区二区三区| 国产精品xxx在线观看| 精品亚洲成人| 国产一二在线播放| 亚洲韩日在线| 亚洲欧美日本视频在线观看| 中文字幕一区二区精品区| 日韩毛片一区| 麻豆精品99| 久久久一本精品| 夜夜嗨网站十八久久| 免费看日韩精品| 97精品国产99久久久久久免费| 国产精品激情| 91欧美日韩| 欧美天堂亚洲电影院在线观看| 亚洲午夜久久| 精品亚洲成人| 一区福利视频| 欧美日本久久| 日韩欧美二区| 久久成人亚洲| 国产麻豆精品| 999久久久国产精品| 美女尤物久久精品| 国产亚洲高清在线观看| 国产精品xx| 免费视频久久| 国产精品国码视频| av高清不卡| 亚洲毛片在线| 国产精品久久久久蜜臀| 国产农村妇女精品一二区| 91免费精品国偷自产在线在线| 欧美韩日一区| 亚洲狼人精品一区二区三区| 麻豆成人av在线| 国产视频一区在线观看一区免费| 日韩av午夜在线观看| 国产精品麻豆久久| 中文字幕一区二区av| 国产精品99久久精品| 美女久久网站| 国产白浆在线免费观看| 老司机久久99久久精品播放免费| 麻豆精品视频在线观看视频| 午夜日本精品| 久久精品毛片| 免费观看久久久4p| 正在播放日韩精品| 日韩不卡一区二区| 1024精品久久久久久久久| 国产日韩三级| 黄色免费成人| 色综合五月天| 国产日产一区| 亚洲免费黄色| 9999国产精品| 欧美久久一区二区三区| 激情五月综合网| 久久成人av| 蜜臀av性久久久久蜜臀aⅴ四虎| 黄色精品视频| 日韩av在线免费观看不卡| 国产在线欧美| 精品国产a一区二区三区v免费| 免费成人性网站| 999久久久91| 精品久久97| 国产欧美91| 日韩**一区毛片| 日韩中文欧美在线| 欧美日韩一区二区综合 | 亚洲bt欧美bt精品777| 久久久久午夜电影| 国产精品美女在线观看直播| 亚洲欧美日韩一区在线观看| 韩国精品主播一区二区在线观看| 国产日韩精品视频一区二区三区| 日韩专区在线视频| 黑丝美女一区二区| 亚洲一区资源| 精品一区二区三区免费看| 日本中文字幕视频一区| 中文日韩在线| 亚洲精品电影| 九色精品91| 免费观看久久av| 日韩在线不卡| 狠狠躁少妇一区二区三区| 久久精品国产99国产精品| 国产亚洲观看| 国产日本精品| 国产激情久久| 久久亚洲人体|