免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
AES+RSA
前言
最近維護公司APP應(yīng)用的登錄模塊,由于測試人員用Fiddler抓包工具抓取到了公司關(guān)于登錄時候的明文登錄信息。雖然使用的是HTTPS的方式進行http請求的,但還是被Fiddler抓到了明文內(nèi)容。因此,需要對之前未加密的登錄信息進行加密。在網(wǎng)上搜到一篇關(guān)于AES+RSA加密方案的文章,如下面鏈接所示,按照該方案成功解決了加密問題,在這里記錄一下。
首先來看看未加密時,通過Fiddler抓包獲取的明文信息如圖1所示:未加密的抓包截圖
圖1 未加密時候,F(xiàn)iddler抓包獲取的請求體
圖2 未加密時候,F(xiàn)iddler抓包獲取的請求頭
通過圖1可以明顯地看到所有的http請求信息都是透明的。如果真的有有心人去盜竊用戶的信息的話,會造成多大的損失。<喎?"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMiBpZD0="加密之后的抓包截圖">加密之后的抓包截圖 圖4 加密之后,F(xiàn)iddler抓包獲取的請求體
圖5 加密之后,F(xiàn)iddler抓包獲取的請求頭
通過圖4,可以看到所有的請求體都通過AES加密后,再使用Base64進行編解碼轉(zhuǎn)換后的請求體,即使是被有心人去竊取了,也很難在有效的時間內(nèi)進行破解。
首先來看一張圖,來看看實現(xiàn)該需求用到的幾個常用的加解密名詞
圖6 加解密常用名詞
基本需求及概念
隨著Internet網(wǎng)的廣泛應(yīng)用,信息安全問題日益突出,以數(shù)據(jù)加密技術(shù)為核心的信息安全技術(shù)也得到了極大的發(fā)展。目前的數(shù)據(jù)加密技術(shù)根據(jù)加密密鑰類型可分私鑰加密(對稱加密)系統(tǒng)和公鑰加密(非對稱加密)系統(tǒng)。
對稱加密算法是較傳統(tǒng)的加密體制,通信雙方在加/解密過程中使用他們共享的單一密鑰,鑒于其算法簡單和加密速度快的優(yōu)點,目前仍然是主流的密碼體制之一。最常用的對稱密碼算法是數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)算法,但是由于DES密鑰長度較短,已經(jīng)不適合當(dāng)今分布式開放網(wǎng)絡(luò)對數(shù)據(jù)加密安全性的要求。最后,一種新的基于Rijndael算法對稱高級數(shù)據(jù)加密標(biāo)準(zhǔn)AES取代了數(shù)據(jù)加密標(biāo)準(zhǔn)DES。非對稱加密由于加/解密鑰不同(公鑰加密,私鑰解密),密鑰管理簡單,也得到廣泛應(yīng)用。RSA是非對稱加密系統(tǒng)最著名的公鑰密碼算法。
AES算法
AES基本原理及算法流程
美國國家標(biāo)準(zhǔn)和技術(shù)研究所(NIST)經(jīng)過三輪候選算法篩選,從眾多的分組密碼中選中Rijndael算法作為高級加密標(biāo)準(zhǔn)(AES)。Rijndael密碼是一個迭代型分組密碼,分組長度和密碼長度都是可變的,分組長度和密碼長度可以獨立的指定為128比特,192比特或者256比特。AES的加密算法的數(shù)據(jù)處理單位是字節(jié),128位的比特信息被分成16個字節(jié),按順序復(fù)制到一個4*4的矩陣中,稱為狀態(tài)(state),AES的所有變換都是基于狀態(tài)矩陣的變換。
用Nr表示對一個數(shù)據(jù)分組加密的輪數(shù)(加密輪數(shù)與密鑰長度的關(guān)系如表1所示)。在輪函數(shù)的每一輪迭代中,包括四步變換,分別是字節(jié)代換運算(ByteSub())、行變換(ShiftRows())、列混合(MixColumns())以及輪密鑰的添加變換AddRoundKey()[3],其作用就是通過重復(fù)簡單的非線形變換、混合函數(shù)變換,將字節(jié)代換運算產(chǎn)生的非線性擴散,達(dá)到充分的混合,在每輪迭代中引入不同的密鑰,從而實現(xiàn)加密的有效性。
表1 是三種不同類型的AES加密密鑰分組大小與相應(yīng)的加密輪數(shù)的對照表。加密開始時,輸入分組的各字節(jié)按表2 的方式裝入矩陣state中。如輸入ABCDEFGHIJKLMNOP,則輸入塊影射到如表2的狀態(tài)矩陣中。
表1:
AES類型密鑰長度分組長度加密輪數(shù)
AES-1284字4字10
AES-1926字4字12
AES-2568字4字14
表2:
AEIM
BFJN
CGKO
DHLP
1、字節(jié)代換運算(ByteSub())
字節(jié)代換運算是一個可逆的非線形字節(jié)代換操作,對分組中的每個字節(jié)進行,對字節(jié)的操作遵循一個代換表,即S盒。S盒由有限域 GF(28)上的乘法取逆和GF(2)上的仿射變換兩步組成。
2、行變換ShiftRows()
行變換是一種線性變換,其目的就是使密碼信息達(dá)到充分的混亂,提高非線形度。行變換對狀態(tài)的每行以字節(jié)為單位進行循環(huán)右移,移動字節(jié)數(shù)根據(jù)行數(shù)來確定,第0行不發(fā)生偏移,第一行循環(huán)右移一個字節(jié),第二行移兩個,依次類推。
+3、 列混合變換MixColumns()
列變換就是從狀態(tài)中取出一列,表示成多項式的形式后,用它乘以一個固定的多項式a(x),然后將所得結(jié)果進行取模運算,模值為 x4+1。其中a(x)={03}x3+{02}x2+{01}x+{02},
這個多項式與x4+1互質(zhì),因此是可逆的。列混合變換的算術(shù)表達(dá)式為:s’(x)= a(x) s(x),其中, s(x)表示狀態(tài)的列多項式。
4、輪密鑰的添加變換AddRoundKey()
在這個操作中,輪密鑰被簡單地異或到狀態(tài)中,輪密鑰根據(jù)密鑰表獲得,其長度等于數(shù)據(jù)塊的長度Nb。AES算法流程
對于發(fā)送方,它首先創(chuàng)建一個AES私鑰,并用口令對這個私鑰進行加密。然后把用口令加密后的AES密鑰通過Internet發(fā)送到接收方。發(fā)送方解密這個私鑰,并用此私鑰加密明文得到密文,密文和加密后的AES密鑰一起通過Internet發(fā)送到接收方。接收方收到后再用口令對加密密鑰進行解密得到AES密鑰,最后用解密后的密鑰把收到的密文解密成明文。圖7中是這個過程的實現(xiàn)流程。 圖7 AES算法流程
RSA算法
RSA算法基本原理及流程
RSA是在1977年發(fā)明RSA密碼系統(tǒng)的三個人的名字的首字母的縮寫,他們是:Ron Rivest、Adi Shamir和Leonard Adleman。它是第一個公鑰加密算法,在很多密碼協(xié)議中都有應(yīng)用,如SSL和S/MIME。RSA算法是基于大質(zhì)數(shù)的因數(shù)分解的公匙體系。簡單的講,就是兩個很大的質(zhì)數(shù),一個作為公鑰,另一個作為私鑰,如用其中一個加密,則用另一個解密。密鑰長度從40到2048位可變,密鑰越長,加密效果越好,但加密解密的開銷也大。RSA算法可簡單描述如下:
1
2
3
<code>公開密鑰:n=pq,(p,q為兩個不同的很大的質(zhì)數(shù),p和q必須保密)
將(p-1)和(q-1)相乘得到φ(n)
選擇一個整數(shù)e (1<e<φ(n))與φ(n)互質(zhì) c="mc(mod" code="" d="e-1modφ(n),即計算一個數(shù)字d,使得它滿足公式" de="1" m="cd(mod"></e<φ(n))與φ(n)互質(zhì)></code>
RSA算法實現(xiàn)流程
首先,接收方創(chuàng)建RSA密匙對,即一個公鑰和一個私鑰,公鑰被發(fā)送到發(fā)送方,私鑰則被保存在接收方。發(fā)送方在接收到這個公鑰后,用該公鑰對明文進行加密得到密文,然后把密文通過網(wǎng)絡(luò)傳輸給接收方。接收方在收到它們后,用RSA私鑰對收到的密文進行解密,最后得到明文。圖8是整個過程的實現(xiàn)流程。
圖8 RSA算法實現(xiàn)流程
AES與RSA相結(jié)合數(shù)據(jù)加密方案
RSA算法是公開密鑰系統(tǒng)的代表,其安全性建立在具有大素數(shù)因子的合數(shù),其因子分解困難這一法則之上的。Rijndael算法作為新一代的高級加密標(biāo)準(zhǔn),運行時不需要計算機有非常高的處理能力和大的內(nèi)存,操作可以很容易的抵御時間和空間的攻擊,在不同的運行環(huán)境下始終能保持良好的性能。這使AES將安全,高效,性能,方便,靈活性集于一體,理應(yīng)成為網(wǎng)絡(luò)數(shù)據(jù)加密的首選。相比較,因為AES密鑰的長度最長只有256比特,可以利用軟件和硬件實現(xiàn)高速處理,而RSA算法需要進行大整數(shù)的乘冪和求模等多倍字長處理,處理速度明顯慢于AES[5];所以AES算法加解密處理效率明顯高于RSA算法。在密鑰管理方面,因為AES算法要求在通信前對密鑰進行秘密分配,解密的私鑰必須通過網(wǎng)絡(luò)傳送至加密數(shù)據(jù)接收方,而RSA采用公鑰加密,私鑰解密(或私鑰加密,公鑰解密),加解密過程中不必網(wǎng)絡(luò)傳輸保密的密鑰;所以RSA算法密鑰管理要明顯優(yōu)于AES算法。
從上面比較得知,由于RSA加解密速度慢,不適合大量數(shù)據(jù)文件加密,因此在網(wǎng)絡(luò)中完全用公開密碼體制傳輸機密信息是沒有必要,也是不太現(xiàn)實的。AES加密速度很快,但是在網(wǎng)絡(luò)傳輸過程中如何安全管理AES密鑰是保證AES加密安全的重要環(huán)節(jié)。這樣在傳送機密信息的雙方,如果使用AES對稱密碼體制對傳輸數(shù)據(jù)加密,同時使用RSA不對稱密碼體制來傳送AES的密鑰,就可以綜合發(fā)揮AES和RSA的優(yōu)點同時避免它們?nèi)秉c來實現(xiàn)一種新的數(shù)據(jù)加密方案。加解密實現(xiàn)流程如圖(9)。
圖9 AES與RSA相結(jié)合數(shù)據(jù)加密方案流程
具體過程是先由接收方創(chuàng)建RSA密鑰對,接收方通過Internet發(fā)送RSA公鑰到發(fā)送方,同時保存RSA私鑰。而發(fā)送方創(chuàng)建AES密鑰,并用該AES密鑰加密待傳送的明文數(shù)據(jù),同時用接受的RSA公鑰加密AES密鑰,最后把用RSA公鑰加密后的AES密鑰同密文一起通過Internet傳輸發(fā)送到接收方。當(dāng)接收方收到這個被加密的AES密鑰和密文后,首先調(diào)用接收方保存的RSA私鑰,并用該私鑰解密加密的AES密鑰,得到AES密鑰。最后用該AES密鑰解密密文得到明文。
Android端 AES+RSA結(jié)合實踐
基本要求
保證傳輸數(shù)據(jù)的安全性 保證數(shù)據(jù)的完整性 能夠驗證客戶端的身份基本流程
Android端
1
2
3
4
5
6
7
<code><code>1. 服務(wù)器端(server)分別生成自己的RSA密鑰對,并提供接口給Android客戶端獲取RSA公鑰(rsaPublicKey)
2. client生成AES密鑰(aesKey)
3. client使用自己的AES密鑰(aesKey)對轉(zhuǎn)換為json格式的請求明文數(shù)據(jù)(data)進行加密,得到加密后的請求數(shù)據(jù)encryptData
4. client提供server提供的接口獲取RSA公鑰(rsaPublicKey)
5. client使用獲取RSA公鑰(rsaPublicKey)對AES密鑰(aesKey)進行加密,得到encryptAesKey
6. client將encryptAesKey作為http請求頭參數(shù),將加密后的請求數(shù)據(jù)encryptData作為請求體一起傳輸給服務(wù)器端
</code></code>
服務(wù)器端
1
2
3
4
5
<code><code> 1. server 響應(yīng)client的http請求,讀取http請求頭。獲得client傳過來的加密后的AES密鑰(encryptAesKey),讀取http請求體,獲得client傳過來的加密后的請求數(shù)據(jù)(encryptData)。
2. server使用自己的RSA私鑰(rsaPrivateKey)對加密后的AES密鑰(encryptAesKey)進行RSA解密,得到AES密鑰(aesKey)
3. 使用解密后的AES密鑰(aesKey)對加密后的請求數(shù)據(jù)(encryptData),進行AES解密操作,得到解密后的請求數(shù)據(jù)(data),該數(shù)據(jù)為json格式
4. 對解密后的請求數(shù)據(jù)(data)進行json解析,然后做相關(guān)的響應(yīng)操作。
</code></code>
基本上如下圖所示的流程:
由于公司代碼設(shè)計的內(nèi)容太多,不好貼在此處。大家可以參考參考下面的這個github上面的鏈接學(xué)習(xí)一下,本人的實現(xiàn)方式也是參考了下面的代碼,具體的流程還是要和服務(wù)器人員配合一起出方案,進行AES和RSA加密的時候,注意
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
RSA2048基礎(chǔ)知識
非對稱加密rsa算法
加密算法介紹及如何選擇加密算法 , 密鑰,算法,加密算法,加密,密碼學(xué),密碼,對稱,ecc...
數(shù)據(jù)庫加密、解密技術(shù)
酷貼!3DES、AES、RC6、TEA、RSA、MD5、SHA1、SHA256加密源碼大聚...
C#編程總結(jié)(七)數(shù)據(jù)加密——附源碼
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服