在PHP中加密

2021-08-29 12:55:54 字數 3934 閱讀 6239

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 金...