AES/DES弱加密 - Cipher.getInstance方法



一、API


1. 继承关系


【1】java.lang.Object

【2】java.crypto.Cipher


2. 主要方法


【1】getInstance(String transformation)


【2】getInstance(String transformation, String provider)


【3】getInstance(String transformation, Provider provider)


【4】其他方法


https://developer.android.com/reference/javax/crypto/Cipher.html


3. 示例


【1】调用AES/DES加密算法的语句


【2】CBC是工作模式


         ECB(电子密码本模式:Electronic codebook)

         CBC(密码分组链接模式:Cipher-block chaining)

         CFB(密文反馈模式:Cipher feedback)

         OFB(输出反馈模式:Output feedback)

         

         参考链接

         http://blog.poxiao.me/p/advanced-encryption-standard-and-block-cipher-mode/


         http://m.blog.csdn.net/article/details?id=51066799


【3】PKCS5Padding是填充模式


【4】zerolv是初始化向量


【5】工作模式、填充模式、初始化向量这三种因素一个都不能少,否则如果你不指定的话,那么程序就要调用默认实现


【6】参考链接


http://blog.csdn.net/bingdianlanxin/article/details/46461797


二、触发条件


1. 调用Cipher类的getInstance方法


【1】对应到smali语句中的特征

         invoke-static {v1}, Ljavax/crypto/Cipher;->

               getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;


2. 寄存器赋值的判断


【1】const-string v1, "AES"

          Android提供的AES加密算法API默认使用ECB模式


【2】const-string v1, "DES"

          DES默认是56位加密密钥,已经不安全


【3】const-string v1, "AES/ECB/


【4】const-string v1, "DES/ECB/


【5】const-string v1, "DESede/ECB/

          DESede(三重DES加密)

          http://pandazheng0.lofter.com/post/1ccbccd7_57d23e8


三、漏洞原理


【1】使用AES/DES/DESede加密算法时,如果使用ECB模式,容易受到攻击风险,造成信息泄露


【2】更多内容


http://www.droidsec.cn/android应用安全开发之浅谈加密算法的坑/


四、修复建议


【1】使用AES/DES/DESede加密算法时,应显示指定使用CBC或CFB加密模式

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐