淺談android數(shù)據(jù)存儲(chǔ)加密

寫在開頭

CSDN:http://blog.csdn.net/say_from_wen

掘金:https://juejin.im/user/59b09eb2518825241e2255ea

在移動(dòng)端的開發(fā)中,數(shù)據(jù)安全的問(wèn)題一直是大家備受關(guān)注的,數(shù)據(jù)加密技術(shù)也受到了大家的青睞祟敛。項(xiàng)目中也用到了一些处渣,在這里學(xué)習(xí)總結(jié)下球散,完善下自己的知識(shí)蒜胖,也分享給大家环葵,一起交流B住(末尾也會(huì)說(shuō)下自己在項(xiàng)目中的使用)

按可逆性:加密可分為可逆算法不可逆算法

按對(duì)稱性:加密可分為對(duì)稱算法非對(duì)稱算法

一般的加密分為以下幾種嗜愈,下面會(huì)分別簡(jiǎn)單講解原理和其使用方法:

Base64編碼算法 (可逆)-MD5加密? (不可逆)(還有一個(gè)sha1值,可能做過(guò)支付寶的會(huì)比較熟悉)

-Des加密? (對(duì)稱莽龟,可逆)-Aes加密? (對(duì)稱蠕嫁,可逆)

-Rsa加密(非對(duì)稱,可逆)

淺談對(duì)稱非對(duì)稱

對(duì)稱

對(duì)稱加密算法是較傳統(tǒng)的加密體制毯盈,即通信雙方在加/解密過(guò)程中使用他們共享的單一密鑰剃毒,鑒于其算法簡(jiǎn)單加密速度快的優(yōu)點(diǎn),目前仍然在使用,但是安全性方面就差一點(diǎn)可能赘阀。最常用的對(duì)稱密碼算法是DES算法益缠,而DES密鑰長(zhǎng)度較短,已經(jīng)不適合當(dāng)今分布式開放網(wǎng)絡(luò)對(duì)數(shù)據(jù)加密安全性的要求基公。一種新的基于Rijndael算法(自己腦補(bǔ)幅慌,本人也不太熟悉)對(duì)稱高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn)AES取代了數(shù)據(jù)加密標(biāo)準(zhǔn)DES,彌補(bǔ)了DES的缺陷轰豆,目前使用比較多一點(diǎn)胰伍。

非對(duì)稱

非對(duì)稱加密由于加/解密鑰不同(公鑰加密,私鑰解密)酸休,密鑰管理簡(jiǎn)單骂租,得到了很廣泛的應(yīng)用。RSA是非對(duì)稱加密系統(tǒng)最著名的公鑰密碼算法斑司。但是由于RSA算法進(jìn)行的都是大數(shù)計(jì)算渗饮,使得RSA最快的情況也比AES慢上倍,這是RSA最大的缺陷陡厘。但是其安全性較高抽米,這也是大家比較喜歡的地方吧!

算法講解及使用

Base64算法

Base64其實(shí)并不是安全領(lǐng)域的加密算法糙置,因?yàn)樗募用芙饷芩惴ǘ际枪_的,典型的防菜鳥不防程序猿的例子哈哈是目,Base64編碼本質(zhì)上是一種將二進(jìn)制數(shù)據(jù)轉(zhuǎn)成文本數(shù)據(jù)的方案谤饭。用處就是將一些不適合傳輸?shù)臄?shù)據(jù)內(nèi)容進(jìn)行編碼來(lái)適合傳輸

字符串進(jìn)行Base64編碼

String encodedString = Base64.encodeToString("wenwen".getBytes(), Base64.DEFAULT);

第一個(gè)參數(shù)就是字節(jié)數(shù)組

字符串進(jìn)行Base64解碼

String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT));

decodedString 就是wenwen

MD5算法

它是一種單向加密算法懊纳,只能加密揉抵、無(wú)法解密。多用于密碼的存儲(chǔ)等等嗤疯。對(duì)于MD5的安全性冤今,網(wǎng)上有關(guān)MD5解密的網(wǎng)站數(shù)不勝數(shù),破解機(jī)制采用窮舉法茂缚,就是手機(jī)所有可能的MD5值跑字典戏罢。所以常常采用對(duì)數(shù)據(jù)進(jìn)行多次MD5加密或者采取加鹽(就是加一段獨(dú)有的字符串在進(jìn)行加密)的操作。

使用:


對(duì)稱加密(這里只說(shuō)下應(yīng)用廣泛的AES)

對(duì)稱加密秘鑰是唯一的脚囊,加密解密都是一個(gè)秘鑰龟糕。AES速度上占優(yōu)于RSA,但是只有一個(gè)秘鑰悔耘,安全性較低一些讲岁。

使用:




RSA加密

RSA算法是最流行的公鑰密碼算法,使用長(zhǎng)度可以變化的密鑰。RSA是第一個(gè)既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法缓艳。它在很多密碼協(xié)議中都有應(yīng)用校摩,如SSL和S/MIME。RSA算法是基于大質(zhì)數(shù)的因數(shù)分解的公匙體系阶淘。簡(jiǎn)單的講衙吩,就是兩個(gè)很大的質(zhì)數(shù),一個(gè)作為公鑰舶治,另一個(gè)作為私鑰分井,如用其中一個(gè)加密,則用另一個(gè)解密霉猛。密鑰長(zhǎng)度從40到2048位可變尺锚,密鑰越長(zhǎng),加密效果越好惜浅,但加密解密的開銷也大瘫辩。所以他在加密的速度上回小于AES等對(duì)稱加密。

使用:




RSA所遇問(wèn)題

關(guān)于加密填充方式:之前以為上面這些操作就能實(shí)現(xiàn)rsa加解密坛悉,以為萬(wàn)事大吉了伐厌,呵呵,這事還沒(méi)完裸影,悲劇還是發(fā)生了挣轨,Android這邊加密過(guò)的數(shù)據(jù),服務(wù)器端死活解密不了轩猩,原來(lái)android系統(tǒng)的RSA實(shí)現(xiàn)是"RSA/None/NoPadding"卷扮,而標(biāo)準(zhǔn)JDK實(shí)現(xiàn)是"RSA/None/PKCS1Padding" ,這造成了在android機(jī)上加密后無(wú)法在服務(wù)器上解密的原因均践,所以在實(shí)現(xiàn)的時(shí)候這個(gè)一定要注意晤锹。

實(shí)現(xiàn)分段加密:搞定了填充方式之后又自信的認(rèn)為萬(wàn)事大吉了,可是意外還是發(fā)生了彤委,RSA非對(duì)稱加密內(nèi)容長(zhǎng)度有限制鞭铆,1024位key的最多只能加密127位數(shù)據(jù),否則就會(huì)報(bào)錯(cuò)(javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes) 焦影, RSA 是常用的非對(duì)稱加密算法车遂。最近使用時(shí)卻出現(xiàn)了“不正確的長(zhǎng)度”的異常,研究發(fā)現(xiàn)是由于待加密的數(shù)據(jù)超長(zhǎng)所致偷办。RSA 算法規(guī)定:待加密的字節(jié)數(shù)不能超過(guò)密鑰的長(zhǎng)度值除以 8 再減去 11(即:KeySize / 8 - 11)艰额,而加密后得到密文的字節(jié)數(shù),正好是密鑰的長(zhǎng)度值除以 8(即:KeySize / 8)椒涯。

分段公鑰加密私鑰加密




請(qǐng)接著下圖看1凇!

分段私鑰加密公鑰加密


還是要請(qǐng)你接著下圖看一下

項(xiàng)目中使用

在實(shí)際開發(fā)中,不是太重要的數(shù)據(jù)用一種加密方式感覺(jué)就可以了祖搓。但是比較重要的數(shù)據(jù)建議用多種加密方式結(jié)合的方式狱意,比如我用的RSA+AES加密。

他主要解決了兩個(gè)問(wèn)題:

1.RSA加解密速度慢拯欧,不適合大量數(shù)據(jù)文件加密

2.AES加密速度很快详囤,但是安全性沒(méi)有RSA加密方式的安全。

其主要思想就是服務(wù)端生成公鑰私鑰镐作,并提供接口將公鑰給android端藏姐,android端生成AES秘鑰,并用AES秘鑰對(duì)大量數(shù)據(jù)進(jìn)行加密(解決RSA加解密速度慢的問(wèn)題)该贾,然后用調(diào)用接口拿到的RSA公鑰對(duì)自己生成AES秘鑰進(jìn)行加密羔杨,客戶端將得到的秘鑰和通過(guò)AES加密的數(shù)據(jù)發(fā)送給服務(wù)器。(秘鑰可以放在請(qǐng)求頭中杨蛋,數(shù)據(jù)放在請(qǐng)求體中兜材,這個(gè)隨意了)。服務(wù)拿到你的秘鑰和數(shù)據(jù)后逞力,用私鑰加密得到AES秘鑰曙寡,再通過(guò)秘鑰得到發(fā)送的數(shù)據(jù)就好了。

感謝教我學(xué)習(xí)的大神

這次的學(xué)習(xí)也是學(xué)習(xí)的其他大神的總結(jié)寇荧,非常感謝他們举庶,在這里記錄下來(lái),供自己學(xué)習(xí)也想讓更多的人看到揩抡,幫助更多的人灯变。http://blog.csdn.net/randyjiawenjie/article/details/6587986http://blog.csdn.net/axi295309066/article/details/52491077http://blog.csdn.net/qq_26685493/gongyongfeng的博客http://www.cnblogs.com/whoislcj/李總寫代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捅膘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滚粟,老刑警劉巖寻仗,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凡壤,居然都是意外死亡署尤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門亚侠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)曹体,“玉大人,你說(shuō)我怎么就攤上這事硝烂』穑” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)串稀。 經(jīng)常有香客問(wèn)我除抛,道長(zhǎng),這世上最難降的妖魔是什么母截? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任到忽,我火速辦了婚禮,結(jié)果婚禮上清寇,老公的妹妹穿的比我還像新娘喘漏。我一直安慰自己,他們只是感情好华烟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布翩迈。 她就那樣靜靜地躺著,像睡著了一般垦江。 火紅的嫁衣襯著肌膚如雪帽馋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天比吭,我揣著相機(jī)與錄音绽族,去河邊找鬼。 笑死衩藤,一個(gè)胖子當(dāng)著我的面吹牛吧慢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赏表,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼检诗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瓢剿?” 一聲冷哼從身側(cè)響起逢慌,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎间狂,沒(méi)想到半個(gè)月后攻泼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鉴象,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年忙菠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺弊。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牛欢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淆游,到底是詐尸還是另有隱情傍睹,我是刑警寧澤隔盛,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站焰望,受9級(jí)特大地震影響骚亿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熊赖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一来屠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧震鹉,春花似錦俱笛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浆兰,卻和暖如春磕仅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背簸呈。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工榕订, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜕便。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓劫恒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親轿腺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子两嘴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容