1. 程式人生 > >php加密演算法總結

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為解密後原文