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】其他方法
3. 示例
【1】调用AES/DES加密算法的语句
【2】CBC是工作模式
ECB(电子密码本模式:Electronic codebook)
CBC(密码分组链接模式:Cipher-block chaining)
CFB(密文反馈模式:Cipher feedback)
OFB(输出反馈模式:Output feedback)
参考链接
【3】PKCS5Padding是填充模式
【4】zerolv是初始化向量
【5】工作模式、填充模式、初始化向量这三种因素一个都不能少,否则如果你不指定的话,那么程序就要调用默认实现
【6】参考链接
二、触发条件
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加密)
三、漏洞原理
【1】使用AES/DES/DESede加密算法时,如果使用ECB模式,容易受到攻击风险,造成信息泄露
【2】更多内容
四、修复建议
【1】使用AES/DES/DESede加密算法时,应显示指定使用CBC或CFB加密模式