數(shù)據(jù)MD5+base64址遇、AES+RSA加密原理

在服務器與終端設備進行HTTP通訊時戴涝,常常會被網(wǎng)絡抓包、反編譯(Android APK反編譯工具)等技術得到HTTP通訊接口地址和參數(shù)钻蔑。為了確保信息的安全啥刻,我們必須進行接口參數(shù)加密和解密。本文只講原理咪笑,代碼實現(xiàn)可以另去百度可帽。

(一)、MD5和base64加密

** MD5簡介**
MD5是一個安全的哈希算法窗怒,輸入兩個不同的明文不會得到相同的輸出值映跟,根據(jù)輸出值,不能得到原始的明文扬虚,即其過程不可逆努隙;
MD5有以下兩個最主要的特性。

  • 加密的不可逆性辜昵,只能夠加密荸镊,不能夠解密。
  • 任意長度的明文經(jīng)過加密后長度都是固定的堪置,長度為16進制32位躬存。

它還有以下幾種特點

  1. 容易計算:根據(jù)原數(shù)據(jù)計算出MD5很容易
  2. 抗修改性:MD5對原數(shù)據(jù)十分的敏感,哪怕只修改了一個字節(jié)舀锨,得到的MD5的值與之前的MD5數(shù)值都有很大的差別岭洲。
  3. 防偽性能高:已知原數(shù)據(jù)和它的MD5值,想要找到相同MD5值得數(shù)據(jù)是非常困難的坎匿,可以說幾乎是不可能的盾剩。

** base64 簡介**

  • base64的編碼都是按字符串長度,以每3個8bit的字符為一組替蔬,
  • 然后針對每組彪腔,首先獲取每個字符的ASCII編碼,
  • 然后將ASCII編碼轉換成8bit的二進制进栽,得到一組3*8=24bit的字節(jié)
  • 然后再將這24bit劃分為4個6bit的字節(jié)德挣,并在每個6bit的字節(jié)前面都填兩個高位0,得到4個8bit的字節(jié)
  • 然后將這4個8bit的字節(jié)轉換成10進制快毛,對照Base64編碼表 (下表)格嗅,得到對應編碼后的字符番挺。

** Base64 編碼表 **

Value Char Value Char Value Char Value Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
  • MD5: 全稱為message digest algorithm 5(信息摘要算法), 可以進行加密, 但是不能解密, 屬于單向加密, 通常用于文件校驗。
    MD5 運算結果是一個固定長度為128位的二進制數(shù)屯掖,經(jīng)過一系列的運算得到32個16進制數(shù)玄柏。(每一位16進制數(shù)可以代替4位二進制數(shù),所以128位二進制數(shù)寫成16進制就變成了128/4=32 個贴铜。)
  • Base64: 把任意序列的8為字節(jié)描述為不能直接用肉眼識別的形式, 通常用于郵件粪摘、http加密. 登陸的用戶名和密碼字段通過它加密, 可以進行加密和解密。
    base64算法就是將瀏覽器中不允許出現(xiàn)的+=號給替換成-.這些符號绍坝。
  • 為什么用md5算法加密后又要利用base64算法進行編碼:因為md5加密后得到的數(shù)據(jù)是128位的字節(jié)數(shù)組徘意,將字節(jié)數(shù)組用base64算法加密后得到的是字符串,這樣有利于在其在數(shù)據(jù)庫中的存儲
MD5校驗文件流程

(二)轩褐、AES+Base64加密

簡單的MD5/Base64等已經(jīng)難以滿足當下的數(shù)據(jù)安全標準椎咧,本文簡單的介紹下AES與Base64的混合加密與解密"

** ASE簡介 **
AES 是一個迭代的、對稱密鑰分組的密碼把介,它可以使用128勤讽、192 和 256 位密鑰,并且用 128 位(16字節(jié))分組加密和解密數(shù)據(jù)拗踢,對稱密鑰密碼使用相同的密鑰加密和解密數(shù)據(jù)脚牍。通過分組密碼返回的加密數(shù)據(jù)的位數(shù)與輸入數(shù)據(jù)相同。迭代加密使用一個循環(huán)結構巢墅,在該循環(huán)中重復置換和替換輸入數(shù)據(jù)莫矗。


ASE對稱加密

(三)、AES+RSA加密

** RSA是非對稱加密 **

概念:
公鑰:給需要加密方
私鑰:解密者自己留
密鑰生成過程:
1:隨機選擇兩個質數(shù)p砂缩、q作谚,計算出 n=p x q
2:計算出不大于N與N互質的數(shù)的數(shù)量  f(n)=(p-1) x (q-1).
3:取e不大于f(n)且與f(n)互質的數(shù).
4:計算出e x d mod f(n) = 1 時 d的值.
5:則(e,n)為公鑰(d,n)為私鑰
加密過程:
原文^e mod n = 密文
解密過程:
密文^d mod n = 原文

關于RSA的公私鑰具有以下重要特性:

  • 對于一個私鑰,有且只有一個與之對應的公鑰庵芭。生成者負責生成私鑰和公鑰妹懒,并保存私鑰,公開公鑰
  • 公鑰是公開的双吆,但不可能通過公鑰反推出私鑰眨唬,或者說極難反推,只能窮舉好乐,所以只要密鑰足夠長度匾竿,要通過窮舉而得到私鑰,幾乎是不可能的
  • 通過私鑰加密的密文只能通過公鑰解密蔚万,公鑰加密的密文只有通過私鑰解密

AES加密也叫對稱加密:A用密碼對數(shù)據(jù)進行AES加密后岭妖,B用同樣的密碼對密文進行AES解密。

具體操作方法:

  1. 在終端中采用openssl方式輸入密鑰的相關屬性(公司名、郵箱等)昵慌,然后在終端當前所在的地址下假夺,生成公鑰和私鑰共7個文件(7個文件如何使用請看附錄的拓展了鏈接)。

  2. 此時假設Android客戶端擁有公鑰PublicKey,服務器端擁有公鑰PublicKey和私鑰PrivateKey斋攀。

  3. 安卓發(fā)送請求到服務器端,安卓隨機生成Byte[]隨機密碼已卷,假設RandomKey=“123456”,通過AES算法淳蔼,對Json數(shù)據(jù)利用進行加密侧蘸。

  4. 但是此刻服務器并不知道客戶端的RandomKey是什么,因此需要同時將Randomkey傳給服務器鹉梨,否則服務器無法通過AES對Json數(shù)據(jù)進行解密讳癌。但是如果直接發(fā)送請求,Randomkey就會暴露俯画,所以要對RandomKey進行不可逆的RSA加密。

  5. 安卓將使用Randomkey進行AES加密的Json數(shù)據(jù)司草,和使用PublicKey進行RSA加密的RandomKey通過HTTP傳送到服務器端艰垂。數(shù)據(jù)請求工作完成。

  6. 服務器端接收到AES加密的Json數(shù)據(jù)和Rsa加密的RandomKey數(shù)據(jù)埋虹。

  7. 服務器通過私鑰PrivateKey對加密后的RandomKey進行Rsa解密猜憎。得到安卓生成的原始Randomkey。

  8. 利用原始的RandomKey對加密后的Json數(shù)據(jù)進行AES對稱解密搔课。至此已經(jīng)得到安卓端發(fā)過來的原始Json數(shù)據(jù)胰柑。進行常規(guī)的服務器業(yè)務操作,然后將返回數(shù)據(jù)通過安卓端的RandomKey進行AES加密gouhou后爬泥,Response返回柬讨。

  9. 安卓端接收到Response的數(shù)據(jù)后,利用之前本地生成的RandomKey直接進行AES解密即可袍啡。

AES+RSA加密流程
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末踩官,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子境输,更是在濱河造成了極大的恐慌蔗牡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗅剖,死亡現(xiàn)場離奇詭異辩越,居然都是意外死亡,警方通過查閱死者的電腦和手機信粮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門黔攒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事亏钩×拢” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵姑丑,是天一觀的道長蛤签。 經(jīng)常有香客問我,道長栅哀,這世上最難降的妖魔是什么震肮? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮留拾,結果婚禮上戳晌,老公的妹妹穿的比我還像新娘。我一直安慰自己痴柔,他們只是感情好沦偎,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布惑淳。 她就那樣靜靜地躺著啤誊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厢塘。 梳的紋絲不亂的頭發(fā)上谈火,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天侈询,我揣著相機與錄音,去河邊找鬼糯耍。 笑死扔字,一個胖子當著我的面吹牛,可吹牛的內容都是我干的温技。 我是一名探鬼主播革为,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舵鳞!你這毒婦竟也來了篷角?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤系任,失蹤者是張志新(化名)和其女友劉穎恳蹲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俩滥,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡嘉蕾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了霜旧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错忱。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡儡率,死狀恐怖,靈堂內的尸體忽然破棺而出以清,到底是詐尸還是另有隱情儿普,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布掷倔,位于F島的核電站眉孩,受9級特大地震影響,放射性物質發(fā)生泄漏勒葱。R本人自食惡果不足惜浪汪,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凛虽。 院中可真熱鬧死遭,春花似錦、人聲如沸凯旋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽至非。三九已至钠署,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睡蟋,已是汗流浹背踏幻。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工枷颊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留戳杀,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓夭苗,卻偏偏與公主長得像信卡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子题造,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內容