引言
? ?上一篇說(shuō)到開發(fā)安全漏洞和防護(hù)策略,加密是不能不說(shuō)的重要模塊项炼。
? ? 隨著這幾年APP端技術(shù)的積累担平,黑客技術(shù)在APP端的長(zhǎng)足成長(zhǎng),hook锭部、tweak 方法已經(jīng)非常完善暂论,所以代碼的安全性是很難保證的,甚至被重新打包和注入新的程序等(這里iOS也是一樣的拌禾,可以參考大牛的帖iOS黑客技術(shù))空另。當(dāng)然,如果你的APP和錢的關(guān)系不大蹋砚,黑客是沒興趣去破解你的。
對(duì)重要邏輯設(shè)計(jì)上摄杂,如果加密算法使用得當(dāng)坝咐,就可以很好的防護(hù)這種侵入。
有興趣的同學(xué)析恢,可以了解下黑客的侵入手段墨坚,可以明確一點(diǎn)是,所有的黑客手段都是找到切入點(diǎn)映挂,模擬原程序來(lái)侵入泽篮,是沒辦法獲取到完整的APP代碼,很多情況下柑船,只要適當(dāng)?shù)氖褂眉用芩惴背牛蜁?huì)很好的防護(hù)這種侵入,并對(duì)性能上影響不大鞍时。當(dāng)然亏拉,加密算法扣蜻,不僅僅用于防護(hù)黑客侵入,還有一些常用的場(chǎng)景及塘,避免數(shù)據(jù)泄露莽使,安全驗(yàn)證等。
? ? 本篇笙僚,只講算法本身的性能比對(duì)和常用使用場(chǎng)景芳肌。?
對(duì)稱加密算法
AES(Advanced Encryption Standard):高級(jí)加密標(biāo)準(zhǔn)。至于其他的對(duì)稱算法肋层,例如DES亿笤、3DES這些算法已經(jīng)淘汰,就沒什么好講的了槽驶,有興趣的同學(xué)可以看看算法實(shí)現(xiàn)责嚷。
AES以運(yùn)算速度快,安全性高掂铐,消耗資源低完全超越于其他的對(duì)稱加密算法罕拂,是對(duì)稱加密算法的不二選擇。
相對(duì)來(lái)說(shuō)全陨,這種算法消耗是比較小的爆班,很多場(chǎng)景下都會(huì)用到。
非對(duì)稱加密算法
RSA(三個(gè)人名縮寫):由 RSA 公司發(fā)明辱姨,是一個(gè)支持變長(zhǎng)密鑰的公共密鑰算法柿菩,需要加密的文件塊的長(zhǎng)度也是可變的;
DSA(Digital Signature Algorithm):數(shù)字簽名算法雨涛,是一種標(biāo)準(zhǔn)的?DSS(數(shù)字簽名標(biāo)準(zhǔn))枢舶;
ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學(xué)。
這三種算法相比較替久,DSA只能用于簽名凉泄,不能用于加密和解密。RSA可以用于簽名蚯根,也可以加密解密后众。但從運(yùn)算速度、安全性颅拦、資源消耗上都比不上ECC蒂誉,不過(guò),ECC這種算法距帅,還不夠成熟右锨。鑒于此,RSA是當(dāng)前非對(duì)稱算法中碌秸,應(yīng)用最廣泛的陡蝇,而且由于能同時(shí)實(shí)現(xiàn)加密解密和簽名痊臭,在特殊情況下,會(huì)非常好用登夫,當(dāng)然使用這種加密算法代價(jià)是不菲的广匙,只適用于關(guān)鍵位置。
以后恼策,ECC早晚會(huì)取代RSA鸦致。
對(duì)稱加密算法適用于本地加密解密,而不適用與網(wǎng)絡(luò)加密涣楷,當(dāng)然你那樣用也是可以的分唾,但因?yàn)槭菍?duì)稱加密,這樣只要一端加密key沒保護(hù)好狮斗,整個(gè)加密就完蛋了绽乔;而非對(duì)稱加密算法加密和解密用到的key是不一樣的,所以安全性上相對(duì)來(lái)說(shuō)是更好一點(diǎn)的碳褒,當(dāng)然也必然消耗的資源也會(huì)多折砸。
散列算法
MD5(Message Digest Algorithm 5):是RSA數(shù)據(jù)安全公司開發(fā)的一種單向散列算法。
SHA(Secure Hash Algorithm):可以對(duì)任意長(zhǎng)度的數(shù)據(jù)運(yùn)算生成一個(gè)160位的數(shù)值沙峻;
MD5嚴(yán)格來(lái)說(shuō)不算加密算法睦授,只能說(shuō)是摘要算法,這種算法安全性不高摔寨,但速度快去枷,比如說(shuō)驗(yàn)證文件是否被篡改等類似場(chǎng)景中,就非常好用是复。當(dāng)然删顶,對(duì)于核心重要的模塊,最好不要用MD5淑廊,它太弱了翼闹。
?SHA-1這個(gè),很多開發(fā)android的同學(xué)應(yīng)該都非常了解蒋纬,在之前這個(gè)是非常安全的,但隨著現(xiàn)代計(jì)算機(jī)發(fā)展坚弱,已經(jīng)不安全了蜀备,這種算法,也將被其他的算法替代荒叶。
其他的不是算法的“算法” ?--(O(∩_∩)O 之前自己也干過(guò) ?)
Base64加密算法碾阁,這其實(shí)不是一種算法,只是8bit格式而已些楣,對(duì)熟悉base64格式的人來(lái)說(shuō)脂凶,用這個(gè)"加密"宪睹,弱爆了。
自定義的加鹽算法蚕钦,很多人會(huì)自定義一套算法什么的亭病,其實(shí)根本沒必要,而且沒什么用嘶居。像上面很多算法罪帖,都是基于數(shù)學(xué)上不可解算法的基礎(chǔ)上建立起來(lái)的,我相信我們自己沒那么NB邮屁,所以不要自己瞎折騰了整袁,老實(shí)的用上面的加密算法就好了。
綜述: ?
所有的安全都是相對(duì)的佑吝,算法也是一樣坐昙。所有加密算法設(shè)計(jì)出來(lái)在當(dāng)時(shí)都是安全不可解的,但隨著技術(shù)的發(fā)展芋忿,人類思想上的進(jìn)步炸客,漸漸打破很多難題,無(wú)解漸漸變的有解盗飒,甚至于最后變的完全失去加密的作用嚷量。
另外,上面說(shuō)的逆趣,只適用于APP端蝶溶,這是考慮性能的問題;雖然還有很多高級(jí)的加密算法宣渗,像SSF33抖所,SSF28,SCB2(SM1)等這些商用的不公開的更安全加密算法痕囱,另外還有軍事用的加密算法等田轧,但考慮到運(yùn)算成本等其他因素,都不適用于APP端鞍恢。