引言
? ?上一篇說到開發(fā)安全漏洞和防護策略,加密是不能不說的重要模塊。
? ? 隨著這幾年APP端技術的積累,黑客技術在APP端的長足成長,hook、tweak 方法已經非常完善,所以代碼的安全性是很難保證的,甚至被重新打包和注入新的程序等(這里iOS也是一樣的,可以參考大牛的帖iOS黑客技術)。當然,如果你的APP和錢的關系不大,黑客是沒興趣去破解你的。
對重要邏輯設計上,如果加密算法使用得當,就可以很好的防護這種侵入。
有興趣的同學,可以了解下黑客的侵入手段,可以明確一點是,所有的黑客手段都是找到切入點,模擬原程序來侵入,是沒辦法獲取到完整的APP代碼,很多情況下,只要適當?shù)氖褂眉用芩惴?,就會很好的防護這種侵入,并對性能上影響不大。當然,加密算法,不僅僅用于防護黑客侵入,還有一些常用的場景,避免數(shù)據泄露,安全驗證等。
? ? 本篇,只講算法本身的性能比對和常用使用場景。?
對稱加密算法
AES(Advanced Encryption Standard):高級加密標準。至于其他的對稱算法,例如DES、3DES這些算法已經淘汰,就沒什么好講的了,有興趣的同學可以看看算法實現(xiàn)。
AES以運算速度快,安全性高,消耗資源低完全超越于其他的對稱加密算法,是對稱加密算法的不二選擇。
相對來說,這種算法消耗是比較小的,很多場景下都會用到。
非對稱加密算法
RSA(三個人名縮寫):由 RSA 公司發(fā)明,是一個支持變長密鑰的公共密鑰算法,需要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm):數(shù)字簽名算法,是一種標準的?DSS(數(shù)字簽名標準);
ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。
這三種算法相比較,DSA只能用于簽名,不能用于加密和解密。RSA可以用于簽名,也可以加密解密。但從運算速度、安全性、資源消耗上都比不上ECC,不過,ECC這種算法,還不夠成熟。鑒于此,RSA是當前非對稱算法中,應用最廣泛的,而且由于能同時實現(xiàn)加密解密和簽名,在特殊情況下,會非常好用,當然使用這種加密算法代價是不菲的,只適用于關鍵位置。
以后,ECC早晚會取代RSA。
對稱加密算法適用于本地加密解密,而不適用與網絡加密,當然你那樣用也是可以的,但因為是對稱加密,這樣只要一端加密key沒保護好,整個加密就完蛋了;而非對稱加密算法加密和解密用到的key是不一樣的,所以安全性上相對來說是更好一點的,當然也必然消耗的資源也會多。
散列算法
MD5(Message Digest Algorithm 5):是RSA數(shù)據安全公司開發(fā)的一種單向散列算法。
SHA(Secure Hash Algorithm):可以對任意長度的數(shù)據運算生成一個160位的數(shù)值;
MD5嚴格來說不算加密算法,只能說是摘要算法,這種算法安全性不高,但速度快,比如說驗證文件是否被篡改等類似場景中,就非常好用。當然,對于核心重要的模塊,最好不要用MD5,它太弱了。
?SHA-1這個,很多開發(fā)android的同學應該都非常了解,在之前這個是非常安全的,但隨著現(xiàn)代計算機發(fā)展,已經不安全了,這種算法,也將被其他的算法替代。
其他的不是算法的“算法” ?--(O(∩_∩)O 之前自己也干過 ?)
Base64加密算法,這其實不是一種算法,只是8bit格式而已,對熟悉base64格式的人來說,用這個"加密",弱爆了。
自定義的加鹽算法,很多人會自定義一套算法什么的,其實根本沒必要,而且沒什么用。像上面很多算法,都是基于數(shù)學上不可解算法的基礎上建立起來的,我相信我們自己沒那么NB,所以不要自己瞎折騰了,老實的用上面的加密算法就好了。
綜述: ?
所有的安全都是相對的,算法也是一樣。所有加密算法設計出來在當時都是安全不可解的,但隨著技術的發(fā)展,人類思想上的進步,漸漸打破很多難題,無解漸漸變的有解,甚至于最后變的完全失去加密的作用。
另外,上面說的,只適用于APP端,這是考慮性能的問題;雖然還有很多高級的加密算法,像SSF33,SSF28,SCB2(SM1)等這些商用的不公開的更安全加密算法,另外還有軍事用的加密算法等,但考慮到運算成本等其他因素,都不適用于APP端。