我正在尝试为我的java代码运行fortify,我偶然发现以下错误。你能帮忙吗?
High Priority: An instance of Cipher.getInstance was found.
EncryptionUtils.java:137 (Unconditional: Bad Crypto) [83299E2C-B5DB-45F2-8CFE-01F3E6C0C02D]
55E277C045A4A6E410FCBF9BA5125E3E
我收到此错误的代码行
final Cipher aesCBCCipher = Cipher.getInstance("AES/GCM/Nopadding");
答案 0 :(得分:0)
这可能是因为填充或转换。如果您没有指定转换,那么将假定Java和Android都使用默认的ECB,Fortify认为这不是安全的。
我通过指定:
遇到了同样的问题final Cipher cipher = Cipher.getInstance("AES");
Fortify在我将其更改为以下内容时停止抱怨:
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Here,您可以找到每个JVM都需要支持的转换列表。而here例如是Android支持的。
我怀疑你得到的错误是因为使用GCM需要额外的步骤(如果没有提供它们,Cipher可能默认采用另一种转换 - 我还没有验证过)。请参阅以下摘录自Java docs:
AEM模式(如GCM / CCM)在开始密文真实性计算之前执行所有AAD真实性计算。为了避免必须在内部缓冲密文的实现,必须在处理密文之前(通过update和doFinal方法)将所有AAD数据提供给GCM / CCM实现(通过updateAAD方法)。
如果您使用分析结果打开Fortify Audit Workbench,这将为您提供有关您的问题的更多详细信息和见解。