在PHP中加密

2021-04-15 20:51:01 字數 4083 閱讀 8653

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()各有用處,但二者在功能上都受到一定的限制。

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