php加密解密詳解
不知道大家對於php加密解密有多少了解,本文主要和大家分享php加密解密相關知識,希望能幫助到大家。
一 對稱加密
1.mycyrpt的對稱加密:
), base64_decode ( $string ), MCRYPT_MODE_CBC, md5(md5( $key ))), "12" );
,1);
|
注: 此方法php7.1開始已經被廢棄,開始採用openssl_encrypt和openssl_decrypt , 官方推薦使用openssl一族進行加解密
2.OpenSSL 擴充套件中的對稱加密
|
注: 1. 為什麼要生成iv,iv的作用是什麼
【
回顧一下 openssl_get_cipher_methods() 返回的加密演算法列表,有很多名字中間帶有 “CBC” 字樣,這些加密演算法使用了同一種加密模式,也就是 密碼分組連結模式(Cipher Block Chaining)。
在 CBC 模式的加密演算法中,明文會被分成若干個組,以組為單位加密。每個組的加密過程,依賴他前一個組的資料:需要跟前一組的資料進行異或操作後生成本組的密文。那麼最開頭的那個組又要依賴誰呢?依賴的就是 IV,所以這就是為什麼 IV 要叫初始化向量。IV 是 初始化向量(initialization vector)的縮寫
IV 應該是隨機生成的,所以程式碼用到了 openssl_random_pseudo_bytes() 生成 IV。該函式接收一個 int,代表需要生成的 IV 的長度。
IV 長度隨加密演算法不同而不同。一般人是記不住那麼多演算法需要的 IV 長度的。所以直接使用 openssl_cipher_iv_length() 函式,這個函式返回一個 int,表示加密演算法需要的 IV 長度:
|
比如 AES-256-CBC 需要16位的 IV、 BC-CBC 需要 8 位的 IV、而AES-128-ECB 不需要 IV,所以返回了 0。
】
2. 在使用過程中需要注意的問題
在進行加解密時,兩個函式除了第一個引數不同,其餘引數都要保證相同才能順利解密。最後,在使用需要 IV 的加密演算法時,需要注意:
必須傳 $iv 引數,不傳的話PHP將會丟擲一個 Warning
IV 應該是隨機生成的(比如用 openssl_random_pseudo_bytes() ),不能人為設定
每次加密都應該重新生成一次 IV ,不可偷懶多次加密採用相同 IV
IV 要隨著密文一起儲存(不然就沒法解密啦),可以直接附在密文串後面,也可以分開儲存
如果看不懂,可以參考對稱加密
二 非對稱加密
常用的非對稱加密有RSA演算法,非對稱加密和解密使用的是不同的金鑰,其中一個對外公開作為公鑰,另一個只有私有者擁有,作為私鑰。
用私鑰加密的資訊只有公鑰才能解開,或者反之用公鑰加密的資訊只有私鑰才能解開。
在RSA加解密之前,需要先生成一對公私鑰,可使用Linux自帶的RSA金鑰生成工具openssl獲取一對公私鑰,也可以使用PHP openssl擴充套件函式生成一對公私鑰。
可參考:RSA非對稱加密
注:非對稱加密的缺點是機密和解密花費時間長,速度慢,只適合對少量資料進行加密。
如果既想有很快的加密速度,又想保證資料比對稱加密更安全,可以使用混合加密。(即 對資料進行對稱加密,對金鑰做非對稱加密)
解密的時候,先用非對稱加密得到金鑰,再用金鑰解開密文得到明文。
相關推薦:
相關推薦
php加密解密詳解
不知道大家對於php加密解密有多少了解,本文主要和大家分享php加密解密相關知識,希望能幫助到大家。 一 對稱加密 1.mycyrpt的對稱加密: /** * @param $key //資料加密金鑰 由自己定義,長度有限制 string
AES加密解密詳解
一)什麼是AES? 高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),是一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。 那麼為什麼原來的DES會被取代呢,,原因就在於其使用56位
Cocos2d-x資料加密解密詳解
C++的Base64演算法實現/* * base64.cpp * * Created on: 30/04/2011 * Author: nicholas */ #include "base64.h" #include <cctype> //
RSA加密解密詳解
package cn.com.mink.util; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; im
MySQL 加密解密 詳解
MySQL 資料庫內部有多種 加密函式 解密函式被加密的欄位的型別需要是 VARBINARY、BLOB 型別 儲存AES_ENCRYPT(str,key) : 返回用金鑰key對字串str利用高階加密標準演算法加密後的結果,呼叫AES_ENCRYPT的結果是一個二進位制字串A
DES 加密解密詳解 CCCrypt函式
世界最美好的樣子,便是有你的日子 一, 接觸到加解密後,總結了一下AES, DES,3DES 加解密,其中 包含 <CommonCrypto/CommonCrypto.h>裡的api 1, 主要注意 buffer 的記憶體大小。和 加解密結果的狀態, 重點是
php openssl_sign() 語法+RSA公私鑰加密解密,非對稱加密演算法詳解
其實有時候覺得寫部落格好煩,就個函式就開篇部落格。很小的意見事情而已,知道的人看來多取一舉,或者說沒什麼必要,浪費時間,不知道的人就會很鬱悶。技術就是這樣的,懂的人覺得真的很簡單啊,不知道的人真的好難。。。 一般在跟第三方介面對接資料的時候,為了保證很多都使用的RSA簽名,沒性趣瞭解的同學只需要
PHP 基礎篇 - PHP 中 DES 加解密詳解
tor 數據加密 解密 ans eat mark encrypted hex 基礎 一、簡介 DES 是對稱性加密裏面常見一種,全稱為 Data Encryption Standard,即數據加密標準,是一種使用密鑰加密的塊算法。密鑰長度是64位(bit),超過位數密鑰被忽
PHP 遷移 Mcrypt 至 OpenSSL 加密演算法詳解
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
PHP RSA加解密詳解(附代碼)
獲取 null 網上銀行 get 傳輸 賬戶 linu 數字簽名 mir 前言:RSA加密一般用在涉及到重要數據時所使用的加密算法,比如用戶的賬戶密碼傳輸,訂單的相關數據傳輸等。 加密方式說明:公鑰加密,私鑰解密。也可以 私鑰加密,公鑰解密 一、RSA簡介 R
【PHP系列】PHP組件詳解
命令行 分享 .cn .com function package etc quest 說我 緣起 楓爺之前做過幾年的PHP的研發,大部分都是在開源框架的引導下,編寫代碼。現在依然,本能的會去讓我使用某個PHP框架開發PHP應用,也是因為懶吧,沒有好好的去研究研究除了框架之外
PHP面試題詳解
今天 服務 等待 速度 用途 har pda 說明 lose 自己從網上找了幾份常考到的PHP面試題進行了整理,然後才有了這份PHP面試題,並且我把所有的題目進行了詳細分析和代碼分析,希望可以對大家有幫助,謝謝大家。 這份試題我也上傳到了百度雲,有需要的可以直接去百度雲下載
PHP加密解密數字
sub 得到 ssm clas fyi 3.5 url bstr reac 1 <?php 2 /** 3 * 加密解密類,PHP加密解密數字,適用於URL加密 4 * 該算法僅支持加密數字。比較適用於數據庫中id字段的加密解密,以及根據數字顯示
PHP函數詳解:call_user_func()使用方法
func instead 實例 div style bsp color can this call_user_func函數類似於一種特別的調用函數的方法,使用方法如下: <?php function nowamagic($a,$b) { echo
php引用 & 詳解
class www. style 輸出 ret 建立 內存空間 spa 之間 在PHP 中引用的意思是:不同的名字訪問同一個變量內容. 與C語言中的指針是有差別的.C語言中的指針裏面存儲的是變量的內容在內存中存放的地址 變量的引用 $a = 222; $b = &
PHP基礎入門詳解(一)【世界上最好用的編程語言】
轉換成 c語言 127.0.0.1 mac const 讀取 成對 後臺 isset 簡介 --------- PHP(超文本預處器)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨
PHP 基礎篇 - PHP 錯誤級別詳解
ice 詳細介紹 arch fatal star use tom int error 一、前言 最近經常看到工作 2 年左右的童鞋寫的代碼也會出現以靜態方法的形式調用非靜態方法,這是個 Deprecated 級別的語法錯誤,代碼裏不應該出現的。對方很郁悶,說:為什麽我的環境
LAMP(php動態擴展模塊,httpd的rewrite,php錯誤日誌,php.ini配置詳解)
php動態擴展模塊 httpd的rewrite php錯誤日誌 php.ini配置詳解 一、php動態擴展模塊比如我們需要用到php一個模塊,恰好他沒有這個模塊。我們需要編一個.so出來?/usr/local/php/bin/php -m //查看模塊 ? 下面安裝一個redis的模塊 ? c
JAVA實現DES加密實現詳解
ava util des算法 直接 print uri ret secure 過程 package util; import java.security.SecureRandom; import javax.crypto.spec.DESKeySpec; import j
php.ini 配置詳解
擴展 不同數據庫 style 站點 狀態碼 查詢 cor ip地址 的人 這個文件必須命名為‘‘php.ini‘‘並放置在httpd.conf中的PHPIniDir指令指定的目錄中。最新版本的php.ini可以在下面兩個位置查看:http://cvs.php.net/vie