這篇文章主要介紹加解密演算法,以及在PHP中如何使用
按大類劃分,加解密分為兩大類:對稱加密和非對稱加密。
簡單的區分就是,對稱加密,加解密用的是同一套祕鑰;非對稱加密則有公私兩個祕鑰,公鑰用來加密,私鑰用來解密。
對稱加密
對稱加密的常規演算法有:DES,3DES,AES等,支援一些模式,如 ECB,CBC,CTR等。
PHP中的 OpenSSL擴充套件提供了現成的函式openssl_encrypt
和openssl_decrypt
針對對稱加密,支援多種加密演算法,包括國密 SM4,可通過openssl_get_cipher_methods
檢視具體支援的演算法。
參考資料
PHP OpenSSL擴充套件 - 對稱加密
加密模式
對稱加密
非對稱加密
非對稱加密使用演算法RSA
,區別在於不同的祕鑰長度,現階段推薦祕鑰長度為2048位或者更高。相關的原理可查部落格園或維基百科。
PHP中的使用範例
// 生成金鑰資源id,此函式主要用來校驗公私祕鑰是否能夠正常使用
$pi_key = openssl_pkey_get_private($private_key);
$pu_key = openssl_pkey_get_public($public_key);
// 私鑰加密,除了這樣使用之外,也可以直接原生的祕鑰內容,不進行提取
$encrypted = ‘’;
openssl_private_encrypt($data, $encrypted, $pi_key);
// 轉碼,這裡的$encrypted就是私鑰加密的字串
$encrypted = base64_encode($encrypted);
// 公鑰解密,$decrypted即為公鑰解密後私鑰加密前的明文
$decrypted = ‘’;
$encrypted = base64_decode($encrypted);
openssl_public_decrypt($encrypted, $decrypted, $pu_key);
雜湊雜湊值
雜湊值計算是單向的,因為無法反向推導,一般用來進行各種校驗。比如使用者的登入祕鑰,資料傳輸的簽名。
演算法一般是MD5
,SHA
。
實際的操作中一般會加“鹽”來增加破解的難度,無法通過簡單的撞庫來探測。
實戰
在https
的情況下,理論上來說,資料傳輸加上簽名就OK。不過實際使用中,在一些特別強調安全性的場合,在https
的基礎上依然會加密加簽名。
資料查詢
這篇文章非常的粗略,屬於概括性的介紹,實際使用中的細節部分並沒有多少涉及,現網上有很多這樣細節性的內容。
維基百科和部落格園都是不錯的資訊查詢源。
查詢舉例
搜尋欄:加解密 site:cnblogs.com
本作品採用《CC 協議》,轉載必須註明作者和本文連結