摘要:項(xiàng)目地址前后端交互時(shí)為了保證信息安全可使用方式加密信息,在數(shù)據(jù)量大的時(shí)候可采用結(jié)合方式。由于加密和解密使用同樣規(guī)則簡(jiǎn)稱密鑰,這被稱為對(duì)稱加密算法。從那時(shí)直到現(xiàn)在,算法一直是最廣為使用的非對(duì)稱加密算法。
RSA-JS-PHP 項(xiàng)目地址rsa-js-php
前后端交互時(shí)為了保證信息安全可使用RSA方式加密信息,在數(shù)據(jù)量大的時(shí)候可采用DES+RSA結(jié)合方式。DEMO演示地址一點(diǎn)歷史
1976年以前,所有的加密方法都是同一種模式:
(1)甲方選擇某一種加密規(guī)則,對(duì)信息進(jìn)行加密;
(2)乙方使用同一種規(guī)則,對(duì)信息進(jìn)行解密。由于加密和解密使用同樣規(guī)則(簡(jiǎn)稱"密鑰"),這被稱為"對(duì)稱加密算法"(Symmetric-key algorithm)。
這種加密模式有一個(gè)最大弱點(diǎn):甲方必須把加密規(guī)則告訴乙方,否則無(wú)法解密。保存和傳遞密鑰,就成了最頭疼的問(wèn)題。
1977年,三位數(shù)學(xué)家Rivest、Shamir 和 Adleman 設(shè)計(jì)了一種算法,可以實(shí)現(xiàn)非對(duì)稱加密。這種算法用他們?nèi)齻€(gè)人的名字命名,叫做RSA算法。從那時(shí)直到現(xiàn)在,RSA算法一直是最廣為使用的"非對(duì)稱加密算法"。毫不夸張地說(shuō),只要有計(jì)算機(jī)網(wǎng)絡(luò)的地方,就有RSA算法。
RSA算法的主要原理是利用了數(shù)論中質(zhì)數(shù)的巧妙關(guān)系即歐拉定理,要實(shí)現(xiàn)RSA算法需找到三個(gè)具有特定關(guān)系的值,在此命名為n e d;
假設(shè)有兩個(gè)值互為質(zhì)數(shù)的正整數(shù)p和q,(為了便于運(yùn)算演示,取的值比較小,通常情況下是取的非常大的值,值越大破解的難度越大),p=5 q=17 即 p和q的乘積為n=5x17=85;
計(jì)算得出n的歐拉函數(shù)φ(n)=(p-1)(q-1)=64,在區(qū)間(1,64)中隨機(jī)選擇一個(gè)數(shù)e=13,,需保證e和φ(n)為互質(zhì)關(guān)系;
計(jì)算e對(duì)于φ(n)的模反元素d,得出d=5;至此,已經(jīng)得到了三個(gè)具有特定關(guān)系的值 n=85 e=13 d=5,設(shè)公鑰為(n,e),私鑰即為(n,d);
假設(shè)用戶發(fā)送數(shù)字3到服務(wù)端,通過(guò)RSA加密的過(guò)程為:m=(3^13) mod 85=63,mod為求模,得到密文63;
服務(wù)端收到密文m=63,解密過(guò)程為 s=(63^5) mod 85=3,最終得出原文為3;
加解密關(guān)系為 m=(s^e) mod n,s=(m^d) mod n;私鑰與公鑰可互相使用,只需要保護(hù)一個(gè)不被泄露即可;
于是私鑰泄露就意味著RSA加密失去意義;
使用方式請(qǐng)確保PHP的openssl擴(kuò)展開啟,且保證php在環(huán)境變量中,如果是windows需添加環(huán)境變量:名 OPENSSL_CONF,值 D:httpphpextrassslopenssl.cnf(根據(jù)openssl.cnf目錄而定);
生成新的公私鑰文件在項(xiàng)目根目錄命令行運(yùn)行:
php rsa.php new
保護(hù)好私鑰,確保私鑰不被暴露在web可訪問(wèn)目錄下;
將生成的rsa_pubkey.js引入值web項(xiàng)目中,具體請(qǐng)運(yùn)行DEMO演示即可;
rsa.class.php的使用:
// 初始化參數(shù),設(shè)置公鑰與私鑰的路徑 rsa::$prikey = "src/key/private.pem"; rsa::$pubkey = "src/key/public.pem"; // JavaScript腳本生成位置,用于重新生成公私鑰 rsa::$script = "rsa_pubkey.js"; // $model = 1 公鑰加密,私鑰解密:公開公鑰,保存私鑰 // $model = 2 私鑰加密,公鑰解密:公開私鑰,保存公鑰 rsa::$model = 1; // RSA加密 rsa::encrypt($data); // RSA解密 rsa::decrypt($data); // RSA簽名 rsa::sign($data); // RSA驗(yàn)簽 rsa::verify($data, $sign);
js加密來(lái)源于開源項(xiàng)目jsencrypt本文出自個(gè)人博客 最好的安排 轉(zhuǎn)載請(qǐng)注明出處!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28226.html
摘要:后端解密后端核心代碼注意要放在處理路由前不加會(huì)報(bào)錯(cuò)解密注意這里的常量值要設(shè)置為加密輸入到數(shù)據(jù)庫(kù)中的密碼是存入數(shù)據(jù)庫(kù)中這里,我是用自帶模塊進(jìn)行解密,當(dāng)然,你也可以用的方法進(jìn)行解密。 本文將講解對(duì)于前后端分離的項(xiàng)目,前端注冊(cè)或登錄時(shí)如何保證用戶密碼安全傳輸?shù)絪erver端,最終存入數(shù)據(jù)庫(kù) 為什么需要加密 加密真的有必要嗎?我們先來(lái)看一看前端發(fā)起的ajax請(qǐng)求中,如果不對(duì)密碼進(jìn)行加密,會(huì)發(fā)生...
摘要:錢可以存儲(chǔ)在自己的余額中,這就相當(dāng)于微信錢包,余額可以提現(xiàn)到銀行卡的中。我們的第三方支付平臺(tái)是連連支付,杭州的一家公司。私鑰怎么加簽每個(gè)公司的加簽方式是不一樣的,支付寶有支付寶的加簽方式,微信有微信的加簽方式。 導(dǎo)讀 筆者在校期間,通過(guò)自學(xué)java。學(xué)校里也開過(guò)這門課,但是,講的都是一些基礎(chǔ),比如java的表達(dá)式、基本類型、自定義類型等等。也都是很基礎(chǔ)的東西,就連lambda表達(dá)式都沒(méi)...
摘要:利用消息認(rèn)證碼可以確保消息不是被別人偽造的,消息認(rèn)證碼是帶密鑰的函數(shù),由于有了一個(gè),所以會(huì)比有更好的安全性。所以需要采用的就是算法,該算法主要利用的是不對(duì)稱加密算法,利用私鑰進(jìn)行簽名,公鑰驗(yàn)證數(shù)據(jù)的完整性。 寫在前面 本文會(huì)到你了解jwt的實(shí)現(xiàn)原理,以及base64編碼的原理。同時(shí)本人也簡(jiǎn)單的實(shí)現(xiàn)了一下jwt的生成,點(diǎn)這里。 jwt是什么 本質(zhì)上它是一段簽名的 JSON 格式的數(shù)據(jù)。由...
摘要:另一方比如小明得到公鑰之后,雙方就可以通信。然而,中間人還是可能截獲公鑰,然后自己弄一對(duì)秘鑰,然后告訴小明說(shuō)是小紅的公鑰。這樣,小亮在簽署小紅的身份證的時(shí)候,可以在小紅身份證后面附上自己的身份證。一般來(lái)說(shuō),自簽名的根身份證用于公司內(nèi)部使用。 前言 自從 Lets Encrypt 上線之后,HTTPS 網(wǎng)站數(shù)量占比越來(lái)越高,相信不久的未來(lái)就可以實(shí)現(xiàn)全網(wǎng) HTTPS,大部分主流瀏覽器也對(duì) ...
閱讀 3591·2021-11-24 10:19
閱讀 3730·2021-09-30 09:47
閱讀 1293·2019-08-30 15:56
閱讀 790·2019-08-29 15:11
閱讀 905·2019-08-29 13:43
閱讀 3570·2019-08-28 18:25
閱讀 2160·2019-08-26 13:27
閱讀 1439·2019-08-26 11:44