引言
上一篇说到开发安全漏洞和防护策略,加密是不能不说的重要模块。
随着这几年APP端技术的积累,黑客技术在APP端的长足成长,hook、tweak 方法已经非常完善,所以代码的安全性是很难保证的,甚至被重新打包和注入新的程序等(这里iOS也是一样的,可以参考大牛的帖iOS黑客技术)。当然,如果你的APP和钱的关系不大,黑客是没兴趣去破解你的。
对重要逻辑设计上,如果加密算法使用得当,就可以很好的防护这种侵入。
有兴趣的同学,可以了解下黑客的侵入手段,可以明确一点是,所有的黑客手段都是找到切入点,模拟原程序来侵入,是没办法获取到完整的APP代码,很多情况下,只要适当的使用加密算法,就会很好的防护这种侵入,并对性能上影响不大。当然,加密算法,不仅仅用于防护黑客侵入,还有一些常用的场景,避免数据泄露,安全验证等。
本篇,只讲算法本身的性能比对和常用使用场景。
对称加密算法
AES(Advanced Encryption Standard):高级加密标准。至于其他的对称算法,例如DES、3DES这些算法已经淘汰,就没什么好讲的了,有兴趣的同学可以看看算法实现。
AES以运算速度快,安全性高,消耗资源低完全超越于其他的对称加密算法,是对称加密算法的不二选择。
相对来说,这种算法消耗是比较小的,很多场景下都会用到。
非对称加密算法
RSA(三个人名缩写):由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
这三种算法相比较,DSA只能用于签名,不能用于加密和解密。RSA可以用于签名,也可以加密解密。但从运算速度、安全性、资源消耗上都比不上ECC,不过,ECC这种算法,还不够成熟。鉴于此,RSA是当前非对称算法中,应用最广泛的,而且由于能同时实现加密解密和签名,在特殊情况下,会非常好用,当然使用这种加密算法代价是不菲的,只适用于关键位置。
以后,ECC早晚会取代RSA。
对称加密算法适用于本地加密解密,而不适用与网络加密,当然你那样用也是可以的,但因为是对称加密,这样只要一端加密key没保护好,整个加密就完蛋了;而非对称加密算法加密和解密用到的key是不一样的,所以安全性上相对来说是更好一点的,当然也必然消耗的资源也会多。
散列算法
MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法。
SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值;
MD5严格来说不算加密算法,只能说是摘要算法,这种算法安全性不高,但速度快,比如说验证文件是否被篡改等类似场景中,就非常好用。当然,对于核心重要的模块,最好不要用MD5,它太弱了。
SHA-1这个,很多开发android的同学应该都非常了解,在之前这个是非常安全的,但随着现代计算机发展,已经不安全了,这种算法,也将被其他的算法替代。
其他的不是算法的“算法” --(O(∩_∩)O 之前自己也干过 )
Base64加密算法,这其实不是一种算法,只是8bit格式而已,对熟悉base64格式的人来说,用这个"加密",弱爆了。
自定义的加盐算法,很多人会自定义一套算法什么的,其实根本没必要,而且没什么用。像上面很多算法,都是基于数学上不可解算法的基础上建立起来的,我相信我们自己没那么NB,所以不要自己瞎折腾了,老实的用上面的加密算法就好了。
综述:
所有的安全都是相对的,算法也是一样。所有加密算法设计出来在当时都是安全不可解的,但随着技术的发展,人类思想上的进步,渐渐打破很多难题,无解渐渐变的有解,甚至于最后变的完全失去加密的作用。
另外,上面说的,只适用于APP端,这是考虑性能的问题;虽然还有很多高级的加密算法,像SSF33,SSF28,SCB2(SM1)等这些商用的不公开的更安全加密算法,另外还有军事用的加密算法等,但考虑到运算成本等其他因素,都不适用于APP端。