国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

PHP如何加密解密?PHP加密解密的方法

2020-03-22 17:47:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
本篇文章給大家?guī)?lái)的內(nèi)容是介紹PHP如何加密解密?PHP加密解密的方法。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你們有所幫助。

為了保證網(wǎng)絡(luò)傳輸數(shù)據(jù)的安全性,涉及敏感數(shù)據(jù)的傳輸,最好對(duì)數(shù)據(jù)預(yù)先加密,然后再在網(wǎng)絡(luò)上進(jìn)行傳輸,同時(shí),還要保證數(shù)據(jù)在另一端是可解密的,并且還必須要通過(guò)鑰匙(公鑰或私鑰)才能解密,沒(méi)有鑰匙(公鑰或私鑰)的人即使是拿到了加密過(guò)的數(shù)據(jù)也無(wú)法解密。

本篇文章主要給大家介紹對(duì)稱加密中的AES加密算法;非對(duì)稱加密中的RSA加密算法。【相關(guān)視頻教程推薦:PHP教程】

一、對(duì)稱加密

采用單鑰密碼系統(tǒng)的加密方法,同一個(gè)密鑰可以同時(shí)用作信息的加密和解密,這種加密方法稱為對(duì)稱加密,也稱為單密鑰加密。

在對(duì)稱加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。

AES加密算法

密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES),又稱Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。2006年,高級(jí)加密標(biāo)準(zhǔn)已然成為對(duì)稱密鑰加密中最流行的算法之一。

PHP的OpenSSL擴(kuò)展已經(jīng)實(shí)現(xiàn)了AES加密算法,我們可以通過(guò)OpenSSL擴(kuò)展提供的方法實(shí)現(xiàn)對(duì)數(shù)據(jù)的加密和解密,PHP在7.2版本已經(jīng)完全移除了MCrypt加密,PHP手冊(cè)在7.1遷移頁(yè)面給出了替代方案,就是用OpenSSL取代MCrypt.

PHP AES實(shí)現(xiàn)(加密、解密)

PHP實(shí)現(xiàn)代碼:

html' target='_blank'>class AES //設(shè)置AES秘鑰 private static $aes_key = bUYJ3nTV6VBasdJF //此處填寫前后端共同約定的秘鑰 * 加密 * @param string $str 要加密的數(shù)據(jù) * @return bool|string 加密后的數(shù)據(jù) static public function encrypt($str) { $data = openssl_encrypt($str, AES-128-ECB , self::$aes_key, OPENSSL_RAW_DATA); $data = base64_encode($data); return $data; * 解密 * @param string $str 要解密的數(shù)據(jù) * @return string 解密后的數(shù)據(jù) static public function decrypt($str) { $decrypted = openssl_decrypt(base64_decode($str), AES-128-ECB , self::$aes_key, OPENSSL_RAW_DATA); return $decrypted;}

二、非對(duì)稱加密

對(duì)稱加密算法在加密和解密時(shí)使用的是同一個(gè)秘鑰;而非對(duì)稱加密算法需要兩個(gè)密鑰來(lái)進(jìn)行加密和解密,這兩個(gè)秘鑰是公開密鑰(public key,簡(jiǎn)稱公鑰)和私有密鑰(private key,簡(jiǎn)稱私鑰)。

在非對(duì)稱加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)等。

RSA加密算法

RSA是目前最有影響力的公鑰加密算法,該算法基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但那時(shí)想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰,即公鑰,而兩個(gè)大素?cái)?shù)組合成私鑰。公鑰是可發(fā)布的供任何人使用,私鑰則為自己所有,供解密之用。

解密者擁有私鑰,并且將由私鑰計(jì)算生成的公鑰發(fā)布給加密者。加密都使用公鑰進(jìn)行加密,并將密文發(fā)送到解密者,解密者用私鑰解密將密文解碼為明文。

以甲要把信息發(fā)給乙為例,首先確定角色:甲為加密者,乙為解密者。首先由乙隨機(jī)確定一個(gè)KEY,稱之為密匙,將這個(gè)KEY始終保存在機(jī)器B中而不發(fā)出來(lái);然后,由這個(gè) KEY計(jì)算出另一個(gè)KEY,稱之為公匙。這個(gè)公鑰的特性是幾乎不可能通過(guò)它自身計(jì)算出生成它的私鑰。接下來(lái)通過(guò)網(wǎng)絡(luò)把這個(gè)公鑰傳給甲,甲收到公鑰后,利用公鑰對(duì)信息加密,并把密文通過(guò)網(wǎng)絡(luò)發(fā)送到乙,最后乙利用已知的私鑰,就對(duì)密文進(jìn)行解碼了。以上就是RSA算法的工作流程。

算法實(shí)現(xiàn)過(guò)程為:

隨意選擇兩個(gè)大的質(zhì)數(shù)p和q,p不等于q,計(jì)算N=pq。

根據(jù)歐拉函數(shù),不大于N且與N互質(zhì)的整數(shù)個(gè)數(shù)為(p-1)(q-1)。

選擇一個(gè)整數(shù)e與(p-1)(q-1)互質(zhì),并且e小于(p-1)(q-1)。

用以下這個(gè)公式計(jì)算d:d× e ≡ 1 (mod (p-1)(q-1))。

將p和q的記錄銷毀。

以上內(nèi)容中,(N,e)是公鑰,(N,d)是私鑰。

生成私鑰和公鑰

生成私鑰文件:

openssl genrsa -out rsa_private_key.pem 1024

利用私鑰,生成公鑰:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

通過(guò)生成的公鑰和私鑰就可以對(duì)數(shù)據(jù)進(jìn)行加解密:

PHP RSA 實(shí)現(xiàn)(加密、解密)

PHP實(shí)現(xiàn)代碼(公鑰加密私鑰解密):

class RSA * @param string $str 要加密的數(shù)據(jù) * @param string $public_key 公鑰 * @return string static public function encrypt($str, $public_key) { $encrypted =  $pu_key = openssl_pkey_get_public($public_key); openssl_public_encrypt($str, $encrypted, $pu_key);//公鑰加密 $encrypted = base64_encode($encrypted); return $encrypted; * 解密 * @param string $str 要解密的數(shù)據(jù) * @param string $private_key 私鑰 * @return string static public function decrypt($str, $private_key) { $decrypted =  $pi_key = openssl_pkey_get_private($private_key); openssl_private_decrypt(base64_decode($str), $decrypted, $pi_key);//私鑰解密 return $decrypted;}

PHP實(shí)現(xiàn)代碼(私鑰加密公鑰解密):

class RSA //私鑰加密  static public function encrypt($str, private_key) { $encrypted =  $pi_key = openssl_pkey_get_private($private_key); openssl_private_encrypt($data, $encrypted, $pi_key); //私鑰加密 $encrypted = base64_encode($encrypted); return $encrypted; //公鑰解密 static public function decrypt($str, $public_key) { $decrypted =  $pu_key = openssl_pkey_get_public($public_key); openssl_public_decrypt(base64_decode($str), $decrypted, $pu_key);//公鑰解密 return $decrypted;}

總結(jié):以上就是本篇文章的全部?jī)?nèi)容,希望能對(duì)大家的學(xué)習(xí)有所幫助。

以上就是PHP如何加密解密?PHP加密解密的方法的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 光泽县| 喜德县| 石渠县| 河北省| 德庆县| 威信县| 区。| 双城市| 和龙市| 驻马店市| 进贤县| 磴口县| 八宿县| 龙井市| 武宁县| 雷州市| 会泽县| 和林格尔县| 大荔县| 治县。| 宁陕县| 介休市| 淳安县| 武平县| 桐柏县| 韶山市| 澎湖县| 邳州市| 梅河口市| 乌鲁木齐县| 常宁市| 陈巴尔虎旗| 肃宁县| 固原市| 哈尔滨市| 五家渠市| 桑植县| 泗水县| 宜章县| 平阴县| 南岸区|