在php的開發過程中,常常需要對部分資料(如使用者密碼)進行加密
一、加密型別:
1.單向雜湊加密
就是把任意長度的資訊進行雜湊計算,得到固定長度的輸出,這個雜湊計算過程是單向的,即不能對固定長度的輸出資訊進行計算從而得到輸入資訊。
(1)特徵:雪崩效應、定長輸出和不可逆。
(2)作用是:確保資料的完整性。
(3)加密演算法:md5(標準金鑰長度128位)、sha1(標準金鑰長度160位)、md4、crc-32
2.對稱雜湊加密
對稱加密是指加密和解密是使用同乙個金鑰,或者可以互相推算。
(1)加密方和解密方使用同乙個金鑰。
(2)加密解密的速度比較快,適合資料比較長時的使用。
(3)金鑰傳輸的過程不安全,且容易被破解,金鑰管理也比較麻煩。
(4)加密演算法:des(data encryption standard)、3des、aes(advanced encryption standard,支援128、192、256、512位金鑰的加密)、blowfish。
3.非對稱雜湊加密
非對稱加密和解密使用的不是同乙個金鑰,其中乙個對外公開,稱作公鑰,另乙個只有所屬者知道,稱作私鑰。
(1)每個使用者擁用一對金鑰加密:公鑰和私鑰。
(2)公鑰加密,私鑰解密;私鑰加密,公鑰解密。
(3)公鑰傳輸的過程不安全,易被竊取和替換。
(4)由於公鑰使用的金鑰長度非常長,所以公鑰加密速度非常慢,一般不使用其去加密。
(5)某乙個使用者用其私鑰加密,其他使用者用其公鑰解密,實現數字簽名的作用。
(6)公鑰加密的另乙個作用是實現金鑰交換。
(7)加密和簽名演算法:rsa、elgamal。
(8)公鑰簽名演算法:dsa。
注釋:(1)rsa:由 rsa 公司發明,是乙個支援變長金鑰的公共金鑰演算法,需要加密的檔案塊的長度也是可變的;
(2)dsa(digital signature algorithm):數字簽名演算法,是一種標準的 dss(數字簽名標準);
(3)由於非對稱加密演算法的執行速度比對稱加密演算法的速度慢很多,當我們需要加密大量的資料時,建議採用對稱加密演算法,提高加解密速度。
對稱加密演算法不能實現簽名,因此簽名只能非對稱演算法。
(4)由於對稱加密演算法的金鑰管理是乙個複雜的過程,金鑰的管理直接決定著他的安全性,因此當資料量很小時,我們可以考慮採用非對稱加密演算法。
(5)在實際的操作過程中,我們通常採用的方式是:採用非對稱加密演算法管理對稱演算法的金鑰,然後用對稱加密演算法加密資料,這樣我們就整合了兩類加密演算法的優點,既實現了加密速度快的優點,又實現了安全方便管理金鑰的優點。
二、php中常用的加密函式:
1.md5加密:
string md5 ( string str
[,bo
olstr[,bool
raw_output = false ] )
(1)md5()預設情況下以 32 字元十六進製制數字形式返回雜湊值,它接受兩個引數,第乙個為要加密的字串,第二個為raw_output的布林值,
預設為false,如果設定為true,md5()則會返回原始的 16 位二進位制格式報文摘要
(2)md5()為單向加密,沒有逆向解密演算法,但是還是可以對一些常見的字串通過收集,列舉,碰撞等方法破解
2.crypt加密:
string crypt ( string str
[,st
ring
str[,string
salt ] )
(1)crypt()接受兩個引數,第乙個為需要加密的字串,第二個為鹽值(就是加密干擾值,如果沒有提供,則預設由php自動生成);
返回雜湊後的字串或乙個少於 13 字元的字串,後者為了區別鹽值。
(2)crypt()為單向加密,跟md5一樣。
3.sha1加密:
string sha1 ( string str
[,bo
olstr[,bool
raw_output = false ])
(1)跟md5很像,不同的是sha1()預設情況下返回40個字元的雜湊值,傳入引數性質一樣,第乙個為加密的字串,
第二個為raw_output的布林值,預設為false,如果設定為true,sha1()則會返回原始的20 位原始格式報文摘要
(2)sha1()也是單行加密,沒有逆向解密演算法
4.urlencode加密:
string urlencode ( string $str )
(1)乙個引數,傳入要加密的字串(通常應用於對url的加密)
(2)urlencode為雙向加密,可以用urldecode來加密(嚴格意義上來說,不算真正的加密)
(3)返回字串,此字串中除了 -_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進製制數,空格則編碼為加號(+)。
(3)常見的urlencode()的轉換字元
5.base64編碼加密:? => %3f
= => %3d
% => %25
& => %26
\ => %5c
空格
=>
%5c
string base64_decode ( string $encoded_data )
(1)base64_encode()接受乙個引數,也就是要編碼的資料(這裡不說字串,是因為很多時候base64用來編碼)
(2)base64_encode()為雙向加密,可用base64_decode()來解密
未來智庫
PHP的幾個常用加密函式
在php的開發過程中,常常需要對部分資料 如使用者密碼 進行加密 一 加密型別 1.單向雜湊加密 就是把任意長度的資訊進行雜湊計算,得到固定長度的輸出,這個雜湊計算過程是單向的,即不能對固定長度的輸出資訊進行計算從而得到輸入資訊。1 特徵 雪崩效應 定長輸出和不可逆。2 作用是 確保資料的完整性。3...
PHP常用加密函式
define str 墨劍 echo md5 加密後的結果為 md5 str md5 加密 echo crypt加密後的結果為 crypt str,str crypt加密 base64encode base64 encode str base64 encode 加密 echo base64 enco...
php 常用加密函式
md5 md5 預設情況下以 32 字元十六進製制數字形式返回雜湊值,它接受兩個引數,第乙個為要加密的字串,第二個為raw output的布林值,預設為false,如果設定為true,md5 則會返回原始的 16 位二進位制格式報文摘要 md5 為單向加密,沒有逆向解密演算法,但是還是可以對一些常見...