黑帽SEO培訓(xùn)篇數(shù)據(jù)加密、HTTPS、線上充值原理?

內(nèi)容大綱.png
目的
面試很多時(shí)候都會(huì)問一些通用的東西,比如多線程,比如數(shù)據(jù)加密,比如HTTPS,換句話說,無論你從事前端還是后端,數(shù)據(jù)加密和HTTPS都是必須掌握的
數(shù)據(jù)加密
首先,我們?yōu)槭裁匆獢?shù)據(jù)加密?因?yàn)镠TTP所有訪問都是明文的,只要能監(jiān)聽到網(wǎng)絡(luò)所有的請(qǐng)求數(shù)據(jù)都是透明的,比如任何瀏覽器的開發(fā)者工具就能很清楚的看到表單提交的參數(shù)和地址,在Android和iOS中也經(jīng)常通過抓包的方式高仿其他的APP,比如Charles就是Mac上常用的抓包工具
表單加密傳輸
由于篇幅有限,這里就暫時(shí)拿JS舉例
比如我們平時(shí)使用的JS插件,凡是.min結(jié)尾的,里面的代碼都是混亂的,如圖:

這些JS都是經(jīng)過壓縮的,他就是把注釋和空格去掉,把變量名變成短變量名,使得我們閱讀起來就很困難了.
其實(shí)目前沒有絕對(duì)的安全,因?yàn)榘踩緛砭褪且粓?chǎng)攻防戰(zhàn),我們能做的,只能是加大解密的成本來防止解密,例如我們可以使用JS混淆,如圖:

從這里就可以看出,一段簡(jiǎn)單的代碼加密壓縮后就變得如此復(fù)雜.但是細(xì)心的同學(xué)就發(fā)現(xiàn),旁邊還有個(gè)解密的按鈕呢,所以這種方式的缺陷就在于,這種加密方式是可逆的,一旦得到了加密的JS,就能解密
對(duì)稱加密算法
此時(shí)回憶一下,我們之前是怎么加密的?我們都是前臺(tái)根據(jù)一定規(guī)則加密,后臺(tái)又根據(jù)這個(gè)規(guī)則解密.那么我們有沒有辦法做得更安全一點(diǎn)?
辦法是有的,比如我們加密的時(shí)候,向后臺(tái)請(qǐng)求一個(gè)隨機(jī)數(shù),而這個(gè)隨機(jī)數(shù),就作為前臺(tái)加密和后臺(tái)解密的鑰匙,我們把這個(gè),稱之為密鑰
我們用一張圖來描述一下這個(gè)過程:

從序號(hào)3我們知道,只要拿不到隨機(jī)數(shù)(密鑰),那么將無法解密,但是萬一別人就是能拿到呢?所以,這個(gè)對(duì)稱加密最大的難點(diǎn)就在于,怎么有效的隱藏密鑰,以及后臺(tái)怎么管理這個(gè)密鑰池
非對(duì)稱加密算法
非對(duì)稱加密算法是我們平時(shí)用的最多的,那么什么是非對(duì)稱加密算法呢?
我們這么設(shè)想,有沒有一種算法加密過后,用逆向的解密是解不出來的?也就是比如原來的密碼是123,我們的加密算法是每一位+1,也就是變成了234,然后得到234后,我們每一位減一卻得不到123,而是需要另一種算法才能算出123
從上面這個(gè)例子我們知道,這個(gè)加密算法和解密算法完全就是兩碼事,這種加密的思想,就是非對(duì)稱加密算法的一種方式
另一種方式,也就是我們用得最多的,其中這個(gè)非對(duì)稱,就體現(xiàn)在鑰匙上面,之前我們的對(duì)稱加密算法,缺陷就是,前臺(tái)和后臺(tái)拿到的鑰匙是一樣的
非對(duì)稱加密算法采用公鑰/私鑰的方式,使用加密算法(明文,公鑰)生成密文,這個(gè)密文,就算知道了公鑰和加密算法,也沒辦法解密,必須要這個(gè)公鑰對(duì)應(yīng)的私鑰才能解密.
也就是說,公鑰加密的,只能靠私鑰解密.私鑰加密的,也只能靠公鑰解密,所以我們的公鑰可以隨意向外公布,只需要隱藏好私鑰即可,具體實(shí)現(xiàn)如圖

所以,這種加密算法的缺陷在于,只要拿到了私鑰,所有的密文都能解開
非對(duì)稱加密算法中,RSA加密算法用得也比較多,RSA是由創(chuàng)建者的名字首字母組成的,由于篇幅有限,這里不過多介紹.
HTTPS
HTTPS簡(jiǎn)單介紹
HTTPS相信大家都不會(huì)陌生,那么怎么認(rèn)識(shí)HTTPS呢,我們從三個(gè)方面入手,也就是是什么,有什么用,為什么需要
是什么:
HTTPS是一種網(wǎng)絡(luò)協(xié)議,他是處于HTTP協(xié)議和TCP/IP協(xié)議之間的一個(gè)協(xié)議(如圖),所以,HTTPS其實(shí)不是我們寫代碼的時(shí)候需要處理的東西,他是browser和應(yīng)用服務(wù)器(例如Tomcat)需要去處理的一個(gè)東西.但是,如果你是做Android或者iOS客戶端,要發(fā)送和處理一個(gè)HTTPS請(qǐng)求的時(shí)候,也需要做額外的處理
有什么用:
能夠讓瀏覽器明確訪問的網(wǎng)站是安全網(wǎng)站一旦HTTPS連接成功,瀏覽器和服務(wù)器之間的數(shù)據(jù)傳輸全部是加密傳輸(對(duì)稱加密)
為什么需要
HTTP上傳輸?shù)乃袛?shù)據(jù)都是明文,于是出現(xiàn)了SSL(Secure Sockets Layer安全套接字層)協(xié)議用于對(duì)HTTP協(xié)議進(jìn)行加密傳輸, HTTP + SSL = HTTPS;IETF對(duì)SSL進(jìn)行了升級(jí),就是TLS(Transport Layer Security),其實(shí)我們現(xiàn)在說的HTTPS都是使用的是TLS;

HTTPS的工作原理
假設(shè)我們?cè)L問https://toby.com,這之間的握手協(xié)議如下圖

HTTPS的工作原理.png
文字解讀:
瀏覽器(客戶端)將自己支持的一套加密規(guī)則(SSL版本號(hào),加密算法版本,哈希算法版本)發(fā)送給網(wǎng)站,網(wǎng)站接收到瀏覽器支持的算法版本,選擇一組對(duì)應(yīng)的算法版本
網(wǎng)站把網(wǎng)站地址,加密公鑰,證書頒發(fā)結(jié)構(gòu)等信息以SSL證書的形式發(fā)送給客戶端
客戶端接收網(wǎng)站發(fā)送的證書后,需要驗(yàn)證該證書的合法性:從底層的SSL證書向上層證書進(jìn)行驗(yàn)證,只要在證書鏈中任意一級(jí)證書是可信的,那么這個(gè)證書是可信的
得到SSL證書中的域名,和當(dāng)前訪問網(wǎng)站進(jìn)行比對(duì),比對(duì)通過,瀏覽器信任該站點(diǎn)
瀏覽器生成一個(gè)隨機(jī)數(shù):random,并使用證書中的公鑰進(jìn)行加密(非對(duì)稱算法),偽代碼如:RSA(SSL證書中的公鑰,random)->密文A
瀏覽器生成一個(gè)握手信息,如:"toby", 并使用確定的HASH算法生成一個(gè)hash值,偽代碼如:HASH("toby")->hash碼
使用random對(duì)toby握手信息進(jìn)行加密(對(duì)稱算法),偽代碼如:encore(random,"toby")->密文B
把密文A,hash碼,密文B全部傳給網(wǎng)站
服務(wù)器接收到密文A、hash碼、密文B后,使用服務(wù)器端SSL證書中的密鑰對(duì)密文A進(jìn)行解密,偽代碼如:RSA(SSL證書中的密鑰,密文A)->random
使用加密算法對(duì)密文B進(jìn)行解密,偽代碼如decode(random,密文B)->握手信息
再用hash算法算出握手信息的hash值,偽代碼如HASH(握手信息)->hash碼
對(duì)比這個(gè)hash碼和傳過來的hash碼是否一致,如果一致,服務(wù)器端再生成一個(gè)握手信息比如"hello"對(duì)服務(wù)器端的一個(gè)握手信息進(jìn)行加密,偽代碼如encode(random,"hello")->密文
對(duì)握手信息進(jìn)行hash計(jì)算,偽代碼如hash("hello")->hash碼
把hash碼和密文傳給瀏覽器
客戶端接收到密文和hash碼
decode(random,密文)->握手信息
HASH(握手信息)->hash碼
對(duì)比hash碼,如果一致,隨機(jī)碼都互相驗(yàn)證過,并且都各自存放好了,此時(shí),兩邊都完成了HTTP交互,現(xiàn)在的結(jié)果是,客戶端和服務(wù)器都有一個(gè)random
接下來的請(qǐng)求就全部使用encode(random,明文)進(jìn)行加密傳輸了,服務(wù)器端則使用decode(random,密文)->明文,此時(shí),這個(gè)加密算法就是一個(gè)對(duì)稱加密算法了,這個(gè)解析出來的明文就會(huì)交給HTTP協(xié)議,所以我們應(yīng)用拿到的是明文
線上充值原理
首先這里有三個(gè)名詞,一個(gè)是xx平臺(tái)就是我們要充值的平臺(tái),還有一個(gè)是第三方支付平臺(tái),這樣的平臺(tái)有很多,比如大家都知道的支付寶,財(cái)付通,網(wǎng)銀在線等等,還有一個(gè)是銀行,這個(gè)大家都懂
我一向是都是喜歡先粗暴地上流程圖,如下:

文字解讀:
首先,xx平臺(tái)需要和第三方平臺(tái)簽訂協(xié)議,這樣xx平臺(tái)就能得到一個(gè)在第三方平臺(tái)的賬戶,那么我們開始充值流程
1.用戶開始在xx平臺(tái)進(jìn)行充值
2.用戶由xx平臺(tái)的在線充值界面跳轉(zhuǎn)到第三方支付平臺(tái),這個(gè)時(shí)候需要帶上username、password、apikey以便第三方平臺(tái)知道我們來自哪個(gè)平臺(tái),同時(shí)還要帶上一個(gè)唯一的id作為交易流水
3.一般有快速支付和網(wǎng)銀支付,這里拿網(wǎng)銀支付舉例,當(dāng)點(diǎn)擊網(wǎng)銀支付的時(shí)候,跳轉(zhuǎn)到銀行的轉(zhuǎn)賬界面,這個(gè)時(shí)候要注意,這個(gè)接口是銀行和第三方支付平臺(tái)對(duì)接的,所以跳轉(zhuǎn)的時(shí)候還要帶上平臺(tái)的唯一標(biāo)識(shí)
4.我們假設(shè)轉(zhuǎn)賬成功,那么這個(gè)時(shí)候,錢是轉(zhuǎn)到了第三方支付平臺(tái),而不是xx平臺(tái)
5.第三方平臺(tái)需要為銀行提供一個(gè)接口,進(jìn)行回調(diào),告訴第三方支付平臺(tái),流水號(hào)的處理結(jié)果
6.這個(gè)時(shí)候,將充值金額累加到xx平臺(tái)的賬戶中,但是這個(gè)只是虛擬現(xiàn)金流的增加,錢還在第三方支付平臺(tái)的銀行賬戶中
7.xx平臺(tái)需要為第三方平臺(tái)提供一個(gè)接口,處理回調(diào),告訴xx平臺(tái),流水號(hào)的處理結(jié)果
8.假設(shè)回調(diào)成功狀態(tài),xx平臺(tái)將在用戶的賬戶把錢增加,但是這個(gè)時(shí)候,也只是虛擬現(xiàn)金流的增加,此時(shí)錢還是在第三方支付平臺(tái)的賬戶
9.第三方支付平臺(tái)會(huì)在一個(gè)結(jié)算周期(一般是兩天到三天),他會(huì)自動(dòng)地把這段時(shí)間之內(nèi)交易成功的錢打到xx平臺(tái)上
所有第三方支付平臺(tái)的原理都是以上流程,所以,對(duì)于我們xx平臺(tái)而言,只需要做兩件事
頁(yè)面跳轉(zhuǎn),把充值信息告訴第三方支付平臺(tái)
寫一個(gè)回調(diào)的接口,接收交易情況
專注于SEO培訓(xùn),快速排名黑帽SEO https://www.heimao.wiki

評(píng)論列表