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加密模式