国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解PHP使用非對(duì)稱(chēng)加密算法RSA

瀏覽:10日期:2022-09-07 17:35:59
加密的類(lèi)型

在日常設(shè)計(jì)及開(kāi)發(fā)中,為確保數(shù)據(jù)傳輸和數(shù)據(jù)存儲(chǔ)的安全,可通過(guò)特定的算法,將數(shù)據(jù)明文加密成復(fù)雜的密文。目前主流加密手段大致可分為單向加密和雙向加密。

單向加密:通過(guò)對(duì)數(shù)據(jù)進(jìn)行摘要計(jì)算生成密文,密文不可逆推還原。算法代表:Base64,MD5,SHA;

雙向加密:與單向加密相反,可以把密文逆推還原成明文,雙向加密又分為對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密。

對(duì)稱(chēng)加密:指數(shù)據(jù)使用者必須擁有相同的密鑰才可以進(jìn)行加密解密,就像彼此約定的一串暗號(hào)。算法代表:DES,3DES,AES,IDEA,RC4,RC5;

非對(duì)稱(chēng)加密:相對(duì)對(duì)稱(chēng)加密而言,無(wú)需擁有同一組密鑰,非對(duì)稱(chēng)加密是一種“信息公開(kāi)的密鑰交換協(xié)議”。非對(duì)稱(chēng)加密需要公開(kāi)密鑰和私有密鑰兩組密鑰,公開(kāi)密鑰和私有密鑰是配對(duì)起來(lái)的,也就是說(shuō)使用公開(kāi)密鑰進(jìn)行數(shù)據(jù)加密,只有對(duì)應(yīng)的私有密鑰才能解密。這兩個(gè)密鑰是數(shù)學(xué)相關(guān),用某用戶密鑰加密后的密文,只能使用該用戶的加密密鑰才能解密。如果知道了其中一個(gè),并不能計(jì)算出另外一個(gè)。因此如果公開(kāi)了一對(duì)密鑰中的一個(gè),并不會(huì)危害到另外一個(gè)密鑰性質(zhì)。這里把公開(kāi)的密鑰為公鑰,不公開(kāi)的密鑰為私鑰。算法代表:RSA,DSA。

以前一直對(duì)客戶端傳給服務(wù)器的信息加密這一塊一臉懵,如果app里面的用戶登錄信息被抓包拿到了,大寫(xiě)著 username:root,password:123456,  那不是很尷尬。

偶然做版權(quán)輸入的時(shí)候遇到了rsa,在支付寶支付的時(shí)候也接觸過(guò),當(dāng)時(shí)不知道這是啥子,現(xiàn)在才知道。

他能保證,客戶端給出的信息,只有擁有私鑰的服務(wù)器才能看,其他人看的都是亂碼。

非對(duì)稱(chēng)加密算法

需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱(chēng)加密算法。

注意以上的一個(gè)點(diǎn),公鑰加密的數(shù)據(jù),只有對(duì)應(yīng)的私鑰才能解密

在日常使用中是醬紫的:將私鑰private_key.pem用在服務(wù)器端,公鑰發(fā)放給android跟ios等前端

客戶端用公鑰加密過(guò)后,數(shù)據(jù)只能被擁有唯一私鑰的服務(wù)器看懂。

具體實(shí)現(xiàn)1、加密解密的第一步

生成公鑰、私鑰對(duì),私鑰加密的內(nèi)容能通過(guò)公鑰解密(反過(guò)來(lái)亦可以)

下載開(kāi)源RSA密鑰生成工具openssl(通常Linux系統(tǒng)都自帶該程序),解壓縮至獨(dú)立的文件夾,進(jìn)入其中的bin目錄,執(zhí)行以下命令:

openssl genrsa -out rsa_private_key.pem 1024

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem

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

第一條命令生成原始 RSA私鑰文件 rsa_private_key.pem

第二條命令將原始 RSA私鑰轉(zhuǎn)換為 pkcs8格式

第三條生成RSA公鑰 rsa_public_key.pem

上面幾個(gè)就可以看出:通過(guò)私鑰能生成對(duì)應(yīng)的公鑰

也有一些網(wǎng)站提供生成rsa公鑰私鑰的服務(wù):http://www.bm8.com.cn/webtool/rsa/

2、PHP的加密解密類(lèi)庫(kù)

<?php class Rsa { /** * 獲取私鑰 * @return bool|resource */private static function getPrivateKey() {$abs_path = dirname(__FILE__) . ’/rsa_private_key.pem’;$content = file_get_contents($abs_path); return openssl_pkey_get_private($content);} /** * 獲取公鑰 * @return bool|resource */private static function getPublicKey() { $abs_path = dirname(__FILE__) . ’/rsa_public_key.pem’;$content = file_get_contents($abs_path); return openssl_pkey_get_public($content); } /** * 私鑰加密 * @param string $data * @return null|string */public static function privEncrypt($data = ’’){if (!is_string($data)) {return null; }return openssl_private_encrypt($data,$encrypted,self::getPrivateKey()) ? base64_encode($encrypted) : null;} /** * 公鑰加密 * @param string $data * @return null|string */public static function publicEncrypt($data = ’’) {if (!is_string($data)) {return null;}return openssl_public_encrypt($data,$encrypted,self::getPublicKey()) ? base64_encode($encrypted) : null;} /** * 私鑰解密 * @param string $encrypted * @return null */public static function privDecrypt($encrypted = ’’){if (!is_string($encrypted)) {return null;}return (openssl_private_decrypt(base64_decode($encrypted), $decrypted, self::getPrivateKey())) ? $decrypted : null;} /** * 公鑰解密 * @param string $encrypted * @return null */public static function publicDecrypt($encrypted = ’’){if (!is_string($encrypted)) {return null;} return (openssl_public_decrypt(base64_decode($encrypted), $decrypted, self::getPublicKey())) ? $decrypted : null;}}調(diào)用demo

<?phprequire_once 'Rsa.php';$rsa = new Rsa();$data[’name’] = ’Tom’;$data[’age’] = ’20’;$privEncrypt = $rsa->privEncrypt(json_encode($data));echo ’私鑰加密后:’.$privEncrypt.’<br>’; $publicDecrypt = $rsa->publicDecrypt($privEncrypt);echo ’公鑰解密后:’.$publicDecrypt.’<br>’; $publicEncrypt = $rsa->publicEncrypt(json_encode($data));echo ’公鑰加密后:’.$publicEncrypt.’<br>’; $privDecrypt = $rsa->privDecrypt($publicEncrypt);echo ’私鑰解密后:’.$privDecrypt.’<br>’;

代碼截圖實(shí)例:

詳解PHP使用非對(duì)稱(chēng)加密算法RSA

以上就是PHP使用非對(duì)稱(chēng)加密算法RSA的詳細(xì)內(nèi)容,更多關(guān)于PHP使用RSA的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 亚洲国产日韩女人aaaaaa毛片在线 | 国产又粗又黄又湿又大 | 国产精品视频久 | 久久在线一区 | 亚洲综合色就色手机在线观看 | 久草视频福利 | 成人免费网站视频 | 亚洲视频观看 | 黄色一级毛片 | 九九久久精品这里久久网 | 国产高清美女一级a毛片久久w | 欧美大片一级毛片 | 免费观看日本特色做爰视频在线 | 成人一级 | 亚洲欧美日韩国产制服另类 | 国产99久久久久久免费看 | 67194成人在线观看 | 中文字幕中文字幕在线 | 15—17女人毛片 | 国产l精品国产亚洲区久久 国产tv在线 | 亚洲国产成人久久一区久久 | 韩国日本一级毛片免费视频 | 国产成人福利美女观看视频 | 中国一级毛片 | 成人毛片一区二区三区 | 手机毛片在线观看 | 国产成人精品综合在线 | 免费国产成人高清无线看软件 | 99在线精品视频在线观看 | 中文无线乱码二三四区 | 日本精品久久久久中文字幕 1 | 午夜国产精品不卡在线观看 | 亚洲成年人在线观看 | 国产欧美一区二区成人影院 | 国产在线播放一区二区 | 日韩精品中文字幕在线 | 久久综合久久88 | 国产成人精品久久二区二区 | 一本久道久久综合中文字幕 | 成年网站视频在线观看 | 高清国产露脸捆绑01经典 |