CodeQL 文档

使用破损或有风险的加密算法

ID: java/weak-cryptographic-algorithm
Kind: path-problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
   - security
   - external/cwe/cwe-327
   - external/cwe/cwe-328
Query suites:
   - java-code-scanning.qls
   - java-security-extended.qls
   - java-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

使用破损或弱的加密算法会导致数据易于被解密。

加密库提供的许多加密算法已知很弱或有缺陷。使用此类算法意味着攻击者可以轻松解密加密数据。

建议

确保使用强大且现代的加密算法。至少使用 AES-128 或 RSA-2048。不要使用 ECB 加密模式,因为它容易受到重放和其他攻击。

示例

以下代码显示了使用 java Cipher 加密一些数据的示例。在创建 Cipher 实例时,您必须指定要使用的加密算法。第一个示例使用 DES,它是一种较旧的算法,现在被认为很弱。第二个示例使用 AES,它是一种强大的现代算法。

// BAD: DES is a weak algorithm 
Cipher des = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

byte[] encrypted = cipher.doFinal(input.getBytes("UTF-8"));

// ...

// GOOD: AES is a strong algorithm
Cipher aes = Cipher.getInstance("AES");

// ...

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私