綜述:密碼學是研究編制密碼(我們簡稱為加密:encode)和破譯密碼(我們稱之為解密:decode)的技術科學。研究密碼變化的客觀規律,應用于編制密碼以保守通信秘密的,稱為編碼學;應用于破譯密碼以獲取通信情報的,稱為破譯學,總稱密碼學。通常情況下,人們將可懂的文本稱為明文;將明文變換成的不可懂的文本稱為密文。把明文變換成密文的過程叫加密;其逆過程,即把密文變換成明文的過程叫解密。
php中提供了哪些數據加密功能?
php提供了crypt()函數完成加密功能:
string crypt (string input_string [, string salt])
這一函數完成被稱作單向加密的功能,也就是說,它可以加密一些明碼,但不能夠將密碼轉換為原來的明碼。單向加密的口令一旦落入第三方人的手里,由于不能被還原為明文,因此也沒有什么大用處。在驗證用戶輸入的口令時,用戶的輸入采用的也是單向算法,如果輸入與存儲的經加密后的口令相匹配,則輸入的口令一定是正確的。
這個函數的input_string參數是需要加密的字符串,第二個參數salt是一個位字串,它能夠影響加密的暗碼,進一步地排除被稱作預計算攻擊的可能性。缺省情況下,php使用一個2個字符的des干擾串,如果你的系統使用的是md5 ,它會使用一個12個字符的干擾串。我們可以通過執行下面的命令發現系統將要使用的干擾串的長度:
print "系統使用的干擾串的長度是:". crypt_salt_length;
crypt()支持四種算法,下面是它支持的算法和相應的salt參數的長度:
[注:以下用表格]
算法 salt長度
crypt_std_des 2-character (默認)
crypt_ext_des 9-character
crypt_md5 12-character beginning with $1$
crypt_blowfish 16-character beginning with $2$
怎樣將php的數據加密功能應用于用戶驗證?
我們用crypt()實現用戶身份驗證。比如我們用一段php程序限制對一個目錄的訪問,只允許注冊用戶訪問這一目錄。我們把資料存儲mysql數據庫的一個表(這個數據表名為members)中:
mysql>create table members (
->username char(14) not null,
->password char(32) not null,
->primary key(username)
->);
然后,我們可以輸入用戶的數據到該表中:
用戶名 密碼
tom kelod1c377lke
john ba1t7vnz9awgk
bill paluvrwsrlz4u
這些加密的口令對應的明碼分別是tom、john和bill。我們將根據口令的前二個字母創建干擾串:
$enteredpassword.
$salt = substr($enteredpassword, 0, 2);
$userpswd = crypt($enteredpassword, $salt);
// $userpswd然后就和用戶名一起存儲在mysql 中
crypt()和apache的口令-應答驗證系統的應用
<?php
$host = "localhost"; //主機
$username = "tom"; //用戶名
$passwd = "hello world"; //密碼
$db = "users"; //數據庫名
// 設置是否通過驗證標志,默認為否
$authorization = 0;
// 提示用戶輸入帳號和密碼
if (isset($php_auth_user) && isset($php_auth_pw)){
mysql_pconnect($host, $username, $passwd) or die("不能連接到mysql服務器!");
mysql_select_db($db) or die("不能選擇數據庫!");
// 進行加密
$salt = substr($php_auth_pw, 0, 2);
$encrypted_pswd = crypt($php_auth_pw, $salt);
新聞熱點
疑難解答