綜述:密碼學是研究編制密碼(我們簡稱為加密: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))
}
if (! $authorization)else
?>
在預設狀態下使用的 crypt()並不是最安全的,所以如果需要較高的安全效能,就需要其他更好的演算法,比如md5(),這一函式使用md5雜湊演算法。
如何通過md5方式進行加密?
php中通過md5方式加密的函式有md5(),它的乙個作用是混編。
乙個混編函式可以將乙個可變長度的資訊變換為具有固定長度被混編過的輸出,也被稱作"資訊文摘",這是十分有用的,因為 乙個固定長度的字串可以用來檢查檔案的完整性和驗證數字簽名與使用者身份。php內建的md5()混編函式將把乙個可變長度的資訊轉換為128位(32個字元)的資訊文摘。混編的乙個有趣的特點是:不能通過分析混編後的資訊得到原來的明碼,因為混編後的結果 與原來的明碼內容沒有依賴關係。即便只改變乙個字串中的乙個字元,也將使得md5混編演算法計算出二個截然不同的結果。我們首先來看下表的內容及其相應的結果:
使用md5()混編字串
<php
$input = "hello,php world!";
$output = md5($input);
print "輸出: $output ";
?>
結果:
輸出: 7996b5e0804042fd531907a4900f190e
注意,結果的長度為32個字元。我們把$input的值稍微改變一下:
使用md5()對乙個稍微變化的字串進行混編
<?php
$input = "hello,php world!";
$output = md5($input);
print "輸出: $output ";
?>
結果:
hash2: f0456d48ed06a5c35b1e42561fa7a016
可以發現,儘管二個結果的長度都是32個字元,但明文中一點微小的變化使得結果發生了很大的變化,我們可以利用這個特點來檢查資料中微小變化。
php 資料加密與解密
最近突發奇想,想實現乙個小功能,具體的保密,呵呵 其中一段我想用資料加密來實現,但是這個並不是像md5那樣單xiang的,因為我只是想在傳輸過程中加密,而傳輸到了後再進行解密。而且我並不想在伺服器端裝什麼元件。所以就.研究.了一下,沒有結果。結果得到了如下函式 base64 encode base6...
加密解密php與nodejs的加密資料互通
nodejs的加密解密 示例如下 usr bin env node var crypto require crypto 解密 function decode cryptkey,iv,secretdata 解密 function encode cryptkey,iv,cleardata var cry...
php常見的加密 php常用加密解密
最近在做乙個功能需要對字串進行加密,然後在指定的方法獲取直接進行解密,從而的到自己需要的引數,接下來吾愛程式設計為大家分享一下php常用加密解密方法,有需要的小夥伴可以參考一下 1 encryptdecrypt function encryptdecrypt key,string,decrypt e...