MISS帶你了解 PHP的幾種加密演算法

加密技術簡介:

加密技術是電子商務採取的主要安全保密措施,是最常用的安全保密手段,利用技術手段把重要的數據變為亂碼(加密)傳送,到達目的地后再用相同或不同的手段還原(解密)。加密技術的應用是多方面的,但最為廣泛的還是在電子商務和VPN上的應用,深受廣大用戶的喜愛。

1.MD5(Message-Digest Algorithm 5):單向加密

語法:string md5(string $str)

md5報文要將以16位元組長度的原始二進位格式返回。返回以32 位字元十六進位數字形式返回散列值。目前主流語言普遍已有MD5實現,將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理。加密演算法的原理大家有興趣的可以自己探索,市面上MD5解密的軟體也有很多,大多都是將破解 的密碼存入資料庫中,進行查詢來「破解」,許多簡單的密碼可以被破解,實際中我們通常使用雙層MD5密碼加密,或者「加鹽」加密。

Advertisements

2.Crypt

語法:string crypt(string $str[,string $salt])

返回一個基於標準UNIX DE5演算法或系統上其他可用的替代演算法的散列字元串,其中,

$str:需要機密的明文,

$salt:加密是的干擾串,使編碼更安全,如果沒有這個salt,將隨機生成一個干擾串,否則刷新加密密文不變。crype()創建出來的會是弱密碼。 php 5.6及之後的版本會在沒有它的情況下拋出一個 E_NOTICE 級別的錯誤。為了更好的安全性,請確保指定一個足夠強度的鹽值。

3.Sha1(單向加密,不可解密)

md5返回32位,sha1返回40位。由於此函數依賴的演算法已不足夠複雜,不推薦使用此函數對明文密碼加密。

Advertisements

語法:string sha1(string $str[,bool $raw_output=false])

$str:加密的字元串

$raw_output:為TRUE時,sha1將以20字元長度原是個事返回,FALSE時,返回40字元長度的十六進位數字。

返回sha1散列值字元串。

4.URL編碼技術加密(雙向)

加密:urlencode($str):除了(- _ .)括弧中三個之外的所有非字母數字字元豆漿被替換成百分號(%)後跟兩位十六進位數,空格則編碼為加號(+)。

解密:urldecode($str):

rawurlencode($str):按照RFC1738對 URL進行編碼,返回字元串,把空格編碼為(%20)。

rawurldecode($str):對已編碼的字元串進行解碼,此字元串中百分號%後跟兩位十六機制的序列豆漿被替換成原義字元。

5.Base64(將非ASCII轉成ASCII)

base64也不算是一種加密演算法,可理解為一種編碼格式。設計此種編碼是為了使二進位數據可以通過非純 8-bit 的傳輸層傳輸,例如電子郵件的主體。

Base64-encoded 數據要比原始數據多佔用 33% 左右的空間。

base64_encode($data):使用base64對data進行編碼

base64_decode($data[,bool $strict=false]):對使用MIME base64編碼的數據進行解碼,$strict如果輸入的數據超出了base64字元表,則返回false.

總結:信息加密技術

  • 單向散列加密(不可逆過程):通過不同長度的信息進行散列計算,得到固定長度的輸出,這個散列計算過程是單向的,既不能對固定長度的輸出進行計算從而獲得輸入信息。

彩虹表概念只做提出,感興趣的coder可以自行了解。

  • 對稱散列加密(有缺點):加密和解密使用的密鑰是同一個密鑰或者可以相互推算。

  • 非對稱散列加密(公鑰/私鑰):一個公開,另一個只有所有者知道。兩個鑰匙可以比喻為公鑰為鎖,而密鑰為那把鎖對應的鑰匙,一對一加解密關係。

結尾:以防大家懶惰,還是在這裡講一下彩虹表:

彩虹表是一個用於加密散列函數逆運算的預先計算好的表, 為破解密碼的散列值(或稱哈希值、微縮圖、摘要、指紋、哈希密文)而準備。一般主流的彩虹表都在100G以上。 這樣的表常常用於恢復由有限集字元組成的固定長度的純文本密碼。這是空間/時間替換的典型實踐, 比每一次嘗試都計算哈希的暴力破解處理時間少而儲存空間多,但卻比簡單的對每條輸入散列翻查表的破解方式儲存空間少而處理時間多。使用加salt的KDF函數可以使這種攻擊難以實現。

Advertisements

你可能會喜歡