php提供了使用其crypt()函式完成單向加密功能的可能性。
string crypt (string input_string [, string salt])
其中的input_string引數是需要加密的字串,第二個可選的salt是一
個位字串,它能夠影響加密的暗碼,進一步地排除被稱作預計算攻擊的可能
性。預設情況下,php使用乙個2個字元的des干擾串,如果你的系統使用的是
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,我將在身份驗證指令碼中用
到這二個變數。
crypt()和apache的口令-應答驗證系統的應用
上面就是乙個核實使用者訪問許可權的簡單身份驗證系統。在使用crypt()保
護重要的機密資料時,記住在預設狀態下使用的crypt()並不是最安全的,只
能用在對安全性要求較低的系統中。
下面介紹另乙個php支援的函式━━md5(),這一函式使用md5雜湊演算法,
它有幾種很有趣的用法值得一提:乙個混編函式可以將乙個可變長度的資訊
變換為具有固定長度被混編過的輸出,也被稱作「資訊文摘」。這是十分有
用的,因為乙個固定長度的字串可以用來檢查檔案的完整性和驗證數字籤
名以及使用者身份驗證。由於它適合於php,php內建的md5()混編函式將把乙個
可變長度的資訊轉換為128位(32個字元)的資訊文摘。混編的乙個有趣的特點
是不能通過分析混編後的資訊得到原來的明碼,因為混編後的結果與原來的
明碼內容沒有依賴關係。 即便只改變乙個字串中的乙個字元,也將使得
md5混編演算法計算出二個截然不同的結果。我們首先來看下表的內容及其相應
的結果:
使用md5()混編字串
<?php
$msg = "this is some message that i just wrote";
$enc_msg = md5($msg);
print "hash: $enc_msg ";
?>
結果:hash: 81ea092649ca32b5ba375e81d8f4972c
注意,結果的長度為32個字元。再來看一下下面的表,其中的$msg的值
有了一點微小的變化:
使用md5()對乙個稍微變化的字串進行混編
<?php
//注意,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()各有用處,但二者在功能上都受到一定的限制。
trackback:
在PHP中加密
php提供了使用其crypt 函式完成單向加密功能的可能性。string crypt string input string string salt 其中的input string引數是需要加密的字串,第二個可選的salt是一 個位字串,它能夠影響加密的暗碼,進一步地排除被稱作預計算攻擊的可能 性。...
php中加密演算法 對稱加密和非對稱加密
為什麼要加密 保證通訊資訊保安,不被篡改 加密型別 對稱加密,非對稱加密,非對稱加密 支付寶 演算法rsa created by phpstorm.user lj date 2018 10 21 time 3 20 pm 對稱加密演算法 str 你還是還撒謊說哈哈哈是 aes new aes enc...
C 中加密解密方法
下面是寫好的方法,使用時直接呼叫即可 using system using system.io using system.security.cryptography namespace csharplibrary.staticservice 加密 引數 strdata 要加密的資料 strkey 金...