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

您的位置:首頁技術文章
文章詳情頁

PHP安全-加密

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

作為一本相關安全方面的書,通常加密是需要提及的話題。我之所以在本書的主體部分忽略了加密問題,是因為它的用途是狹窄的,而開發者應從大處著眼來考慮安全問題。過分依賴于加密常常會混淆問題的根源。盡管加密本身是有效的,但是進行加密并不會神奇地提高一個應用的安全性。

一個PHP開發人員應主要熟悉以下的加密方式:

l對稱加密

l非對稱加密(公鑰)

lHash函數(信息摘要)

l信息驗證碼

本附錄主要關注于使用mcrypt擴展的對稱加密算法。你需要參考的資料如下:

實用加密技術(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. 密碼的存儲

當你在數據庫內存儲的密碼時,永遠不要以明碼方式存入,而是應該存儲密碼的hash值并同時使用附加字串:

<?php

/* $password contains the password. */

$salt = ’SHIFLETT’;

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

/* Store password hash. */

?>

當你需要確認一個密碼是否正確時,以同樣的方式計算出hash值并比較異同:

<?php

$salt = ’SHIFLETT’;

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

/* Compare password hashes. */

?>

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

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

C.2. 使用mcrypt

PHP的標準加密擴展是mcrypt,它支持很多不同的加密算法。你可以通過mcrypt_list_algorithms( )函數來查看你的平臺上支持的算法列表:

<?php

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

?>

加密和解密分別由mcrypt_encrypt( ) 及 mcrypt_decrypt( )函數來實現。這兩個函數都有5個參數,第一個參數是用于指定使用的算法:

<?php

mcrypt_encrypt($algorithm,

$key,

$cleartext,

$mode,

$iv);

mcrypt_decrypt($algorithm,

$key,

$ciphertext,

$mode,

$iv);

?>

其中的加密鍵(第二個參數)是非常敏感的數據,因此你要確保把它存放在安全的地方。可以用第八章中保護數據庫權限的方法來保護加密鍵。如果經濟條件允許的話,硬件加密鍵是最好的選擇,它提供了超級強大的安全性。

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

<?php

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

?>

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

下面的示例類提供了基本的加密解密方法:

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

}

}

?>

上面的類會在其它示例中使用,下面是它的使用方法示例:

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

?>

小提示

本擴展要求你在編譯PHP時使用-mcrypt標識。安裝指南及要求詳見http://php.net/mcrypt。

C.3. 信用卡號的保存

我常常被問到如何安全地保存信用卡號。我的總是會首先詢問他們是否確實有必要保存信用卡號。畢竟不管具體是如何操作的,引入不必要的風險是不明智的。同時國家法律還有關于信用卡信息處理方面的規定,我還時刻小心地提醒我并不是一個法律專家。

本書中我并不會專門討論信用卡處理的方法,而是會說明如何保存加密信息到數據庫及在讀取時解密。該流程會導致系統性能的下降,但是確實提供了一層保護措施。其主要優點是如果數據庫內容泄密暴露出的只是加密信息,但是前提是加密鍵是安全的。因此,加密鍵與加密的實現方法本身同樣重要。

保存加密數據到數據的過程是,首先加密數據,然后通過初始向量與明文建立密文來保存到數據庫。由于密文是二進制字符串,還需要通過base64_encode( )轉換成普通文本字符串以保證二進制編碼的安全存儲。

<?php

$crypt = new crypt();

$crypt->cleartext = ’1234567890123456’;

$crypt->generate_iv();

$crypt->encrypt();

$ciphertext = $crypt->ciphertext;

$iv = $crypt->iv;

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

?>

保存該字串至數據庫。在讀取時,則是上面流程的逆處理:

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

?>

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

C.4. 加密會話數據

如果你的數據庫存在安全問題,或者部分保存在會話中的數據是敏感的,你可能希望加密會話數據。除非很有必要,一般我不推薦這樣做,但是如果你覺得在你的情形下需要這樣做的話,本節提供了一個實現方法的示例。

這個方案十分簡單。實際上,在第八章中,已經說明了如何通過調用session_set_save_handler( )來執行你自己的會話機制。通過對保存和讀取數據的函數的少量調整,你就能加密存入數據庫的數據及在讀取時解密數據:

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

}

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产午夜久久| 国产欧美成人| a国产在线视频| 国产精品tv| 日韩一区二区在线免费| 日本蜜桃在线观看视频| 国产一区二区三区免费在线| 久久99国产精品视频| 精品丝袜久久| 伊人久久成人| 蜜桃视频一区二区三区在线观看 | 高清av一区二区三区| 国产精品高潮呻吟久久久久| 欧美在线首页| 欧美国产三级| 吉吉日韩欧美| 99久久精品费精品国产| 亚洲午夜一级| 久久午夜视频| 日韩精品91亚洲二区在线观看| 日韩欧美精品一区二区综合视频| 日本中文字幕不卡| 国产乱码精品一区二区亚洲| 久久精品人人| 精精国产xxxx视频在线野外| 黄色成人91| 日韩精品久久久久久| 国产亚洲一卡2卡3卡4卡新区| 免费在线日韩av| 999久久久精品国产| 日韩中文字幕区一区有砖一区 | 精品日韩视频| 丝袜美腿亚洲一区二区图片| 国产亚洲精品精品国产亚洲综合| 日本欧美国产| 午夜日本精品| 欧美一区精品| 欧美成人基地| 日韩av午夜在线观看| 91av亚洲| 中文字幕av一区二区三区四区| 国产日韩欧美一区二区三区在线观看| 精品国产网站| 另类国产ts人妖高潮视频| 国产精品videossex| 亚洲调教视频在线观看| 日韩av一区二区三区四区| 欧美sm一区| 亚洲欧美在线专区| 国产黄大片在线观看| 欧美一区=区| 久久99精品久久久野外观看| 国产一区欧美| 国产免费av国片精品草莓男男 | 三级在线看中文字幕完整版| 免播放器亚洲一区| 亚洲婷婷丁香| 新版的欧美在线视频| 深夜日韩欧美| 成人日韩在线| 国产精品欧美三级在线观看| 亚洲国产日韩欧美在线| 日韩欧美久久| 精品一区欧美| 国产剧情一区二区在线观看| 亚洲调教视频在线观看| 国产精品久久久久久av公交车| 亚洲大全视频| 国产一区日韩| 日韩av成人高清| av亚洲免费| 精品久久久亚洲| 亚洲精品一级| 在线日韩电影| 国产中文在线播放| 欧美午夜网站| 亚洲日韩中文字幕一区| 黑丝美女一区二区| 成人综合一区| 亚洲精品动态| 黄色成人91| 久久久精品久久久久久96| 国产精品永久| 亚洲一二av| 亚洲欧美日韩高清在线| 久久久久久久欧美精品| 91成人精品视频| 另类专区亚洲| 久久影院一区二区三区| 日本免费一区二区视频| 黄色亚洲免费| 深夜视频一区二区| 久久精品免视看国产成人| 日本不卡的三区四区五区| 欧美日韩国产高清| 影视先锋久久| 日韩欧美字幕| 久久一区亚洲| 日本成人手机在线| 视频一区二区三区中文字幕| 日韩国产欧美一区二区| 国产精品theporn| 欧美天堂一区二区| 深夜福利亚洲| 美国欧美日韩国产在线播放| 99视频一区| 婷婷中文字幕一区| 麻豆网站免费在线观看| 高清久久精品| 免费观看亚洲天堂| 亚洲精品免费观看| 国产精品亚洲产品| 久久精品欧洲| 中文字幕色婷婷在线视频| 国产成人免费| 天堂网av成人| 国产欧美69| 牛牛精品成人免费视频| 日本三级亚洲精品| 日韩1区2区日韩1区2区| 国产日韩专区| 精品视频亚洲| 91成人福利| 日韩国产高清在线| 综合亚洲自拍| 亚洲资源网站| 蜜桃91丨九色丨蝌蚪91桃色| 免费视频亚洲| 狠狠色狠狠色综合日日tαg| 亚洲一区激情| 免费在线看一区| 天堂精品久久久久| 日韩国产一二三区| 国产福利亚洲| 亚洲特色特黄| 精品1区2区3区4区| 视频一区二区不卡| 日韩免费精品| 久久99久久久精品欧美| 精品一区二区三区中文字幕 | 激情综合网站| 国产精品试看| 亚洲专区视频| 久久精品72免费观看| 国产精品3区| 国产v日韩v欧美v| 亚洲大片在线| 亚洲精品观看| 精品黄色一级片| 久久久久久久久久久9不雅视频| 91精品二区| 欧美一级网址| 久久久久久夜| 久久影视一区| 久久香蕉精品| 久久精品 人人爱| 国产福利91精品一区二区| 久久五月天小说| 亚洲精品九九| 91亚洲一区| 亚洲一区日韩| 国产欧美自拍| 秋霞影视一区二区三区| 鲁大师影院一区二区三区| 91p九色成人| 日韩不卡视频在线观看| 视频精品一区二区| 国产精品九九| 日韩欧美一区二区三区在线观看 | 日韩亚洲国产欧美| 日韩在线黄色| 国产精品成人a在线观看| 欧美成人综合| 日本精品另类| 免费一二一二在线视频| 免费不卡在线观看| 国产在线不卡一区二区三区| 午夜国产精品视频| 国产精品一区二区三区美女| 日韩免费看片| 免费人成网站在线观看欧美高清| 国产日韩欧美三区| 国产精品av久久久久久麻豆网| 日韩精品国产欧美| 日韩一区电影| 日韩不卡在线观看日韩不卡视频| 日韩成人精品一区| 蜜臀av国产精品久久久久| 国产suv精品一区二区四区视频| 99热精品在线| 国产一区二区三区成人欧美日韩在线观看 | 欧美三区四区| 亚洲一二av| 久久久久中文| 国产精品毛片视频| 亚洲激情黄色| 国产aⅴ精品一区二区四区| 蜜桃视频在线观看一区二区| 天堂а√在线最新版中文在线| 日韩在线麻豆|