php加密的作用
#加密:為了做資料加密,不被看到明文。
在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 [, bool $raw_output = false ] )
(1)md5()預設情況下以32字元十六進位數字形式傳回雜湊值,它接受兩個參數,第一個要加密的字串,第二個為raw_output的布林值,
預設為false,如果設定為true,md5()則會傳回原始的16 位元二進位格式封包摘要
(2)md5()為單向加密,沒有逆向解密演算法,但還是可以對一些常見的字串透過收集,枚舉,碰撞等方法破解
2.Crypt加密:
string crypt ( string $str [, string $salt ] )
(1)crypt()接受兩個參數,第一個為需要加密的字串,第二個為鹽值(就是加密幹擾值,如果沒有提供,則預設由PHP自動產生);
傳回散列後的字串或一個少於13 字元的字串,後者為了區別鹽值。
(2)crypt()為單向加密,跟md5一樣。
3.Sha1加密:
string sha1 ( string $str [, 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()的轉換字元
? => %3F = => %3D % => %25 & => %26 \ => %5C 空格 => %5C
5.base64编码加密:
string base64_decode ( string $encoded_data )
(1)base64_encode()接受一个参数,也就是要编码的数据(这里不说字符串,是因为很多时候base64用来编码图片)
(2)base64_encode()为双向加密,可用base64_decode()来解密
以上是php加密的作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!