php加密演算法總結
一.單項雜湊加密(不可逆加密)
屬於摘要演算法,不是一種加密演算法,作用是把任意長的輸入字串變化成固定長的輸出串的一種函式
1)MD5
用法:md5(string,boolean)
string(必填):待加密字串
boolean(可選):true代表生成原始16字元二進位制格式,false代表生成32字元16進位制格式,預設為false
@return:成功返回字串加密結果,失敗返回false
不可逆演算法,但可通過列舉,碰撞,收集等達到解密的效果;所以我們一般可通過雙重MD5加密,或結合Sha1,Crypt等來增加解密難度
2)Crypt
用法:crypt(string.salt)
string(必填):待加密字串
salt(選填):鹽值,用於增加被編碼的字串,使編碼更加安全;預設後,會php回隨機生成鹽值(所以當鹽值為空時,相同原文加密後的值是不一樣的,因為鹽值隨機)
@return:返回加密後的字串或一個少於 13 字元的字串,從而保證在失敗時與鹽值區分開來。
3)Sha1
用法:sha1(string,bollean);
string(必填):待加密字串
boolean(可選):true代表生成原始20字元二進位制格式,false代表生成40字元16進位制格式,預設為false
@return:成功返回字串加密結果,失敗返回false
我們可使用如md5(sha1($str))等加密演算法來提高資料安全性
二.非對稱加密
RSA、Elgamal、揹包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)等,其中最常見的事RSA演算法
1)RSA
非對稱加密使用不同的金鑰分別進行加密和解密,簡單的說就是公鑰加密私鑰解密,反之私鑰加密公鑰解密。所以首先需要生成RSA金鑰串。
1.生成RSA金鑰串 ( openssl或者利用支付寶開發文件的一個RSA金鑰生成器,推薦使用前者)
首先確保系統安裝了openssl,沒有則安裝:yum install -y openssl openssl devel
生成1024位的RSA私鑰:openssl genrsa -out rsa_private_key.pem 1024 執行命令後會看到有rsa_private_key.pem檔案存在
通過rsa_private_key.pem私鑰生成公鑰:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 執行命令後會看到有rsa_public_key.pem檔案存在
2.得到公、私鑰
先通過file_get_contents()拿到金鑰內容,再用openssl_pkey_get_private ,openssl_pkey_get_public 可以分別從檔案內容中得到私鑰、公鑰。
3.加密
一般私鑰加密:
openssl_private_encrypt($str,$encrypted,$private_key);$encrypted為加密後密文
少數公鑰加密:
openssl_public_encrypt($str,$encrypted,$public_key);$encrypted為加密後密文
4.解密
上述私鑰加密的需公鑰解密
openssl_public_decrypt($data,$decrypted,$public_key);$decrypted為解密後原文
反之公鑰加密的需私鑰解密
openssl_private_decrypt($data,$decrypted,$private_key);$decrypted為解密後原文