# 1. Java 加密体系,JCA、JCE、JSSE 的分工 A JCE 是加密框架,JCA 是算法实现 B JSSE 用于数据加密,JCE 用于 TLS C JCA 是加密框架+Provider 机制,JCE 提供加密算法实现,JSSE 负责 SSL/TLS 传输安全 ✓ 正确答案 D 三者完全独立,互不相关
# 2. 哈希算法在 Java 中的正确使用,SHA-256、SHA-3 与 MD5 废弃 A MD5 可用于密码存储,因为速度快 B SHA-256 可以直接无盐存储密码 C SHA-256/SHA-3 用于完整性校验安全,MD5/SHA-1 已废弃,密码存储须用加盐慢哈希而非直接哈希 ✓ 正确答案 D SHA-3 是弱哈希,应避免使用
# 3. 安全随机数生成,SecureRandom vs ThreadLocalRandom A SecureRandom 与 Random 安全性相同 B ThreadLocalRandom 可安全用于生成密钥 C SecureRandom 是密码学安全随机数,用于密钥/盐/IV/Session ID;ThreadLocalRandom 高性能但非安全,仅用于非安全场景 ✓ 正确答案 D 生成 Session ID 用 ThreadLocalRandom 即可
# 4. 用户密码哈希为何必须加盐并选慢哈希(BCrypt/Argon2),与 SHA-256 直接哈希的差异 A 盐使相同密码哈希不同、防彩虹表,慢哈希(BCrypt/Argon2)提高暴力破解成本,SHA-256 快速无盐不安全 ✓ 正确答案 B SHA-256 加盐后即可安全存储密码 C 盐和哈希都可以固定,无需随机 D 慢哈希的意义是让存储更省空间
# 5. 对称加密(AES)在 Java 中的正确使用,GCM 模式、IV 生成 A 用 AES-GCM 认证加密并提供随机唯一的 IV,避免 ECB/CBC 等弱模式,IV 随密文存储 ✓ 正确答案 B IV 可以固定或复用,不影响安全 C AES 用 ECB 模式安全且高效 D GCM 模式不需要 IV
# 6. 非对称加密(RSA/ECC)在 Java 中的应用 A RSA 适合加密任意大小的数据 B ECC 需要很长的密钥才安全 C RSA 用 OAEP 填充加密、ECC 短密钥高性能,非对称用于密钥交换/签名/小数据,配合对称加密做混合加密 ✓ 正确答案 D 非对称加密只能加密,不能签名
# 7. TLS/SSL 配置最佳实践,协议版本、证书验证、主机名验证 A 启用 TLS 1.2/1.3 禁用弱版本,验证证书链(CA/有效期/吊销)并启用主机名验证防中间人 ✓ 正确答案 B 只要用 TLS 就无需验证证书 C 主机名验证可省略,不影响安全 D 应使用 TLS 1.0 以兼容旧系统
# 8. 密钥存储与密钥管理,KeyStore、HSM、云 KMS 如何选择 A KeyStore 安全性最高,适合所有场景 B KeyStore 本地存储、HSM 硬件保护、云 KMS 托管,安全级别与成本递增,云环境适合用 KMS 并支持轮换 ✓ 正确答案 C HSM 成本最低,部署最简单 D 云 KMS 无法提供密钥轮换
# 9. 数字签名在 Java 中的应用,签名算法、证书链验证 A 签名用公钥,验证用私钥 B 证书链验证只需要看证书名称 C 签名算法只能使用 RSA,不能用 ECDSA D 用 Signature 私钥签名公钥验证,算法如 SHA256withRSA/ECDSA,并用 CertPathValidator 验证证书链信任 ✓ 正确答案
# 10. Java 加密体系,JCA/JCE Provider、Cipher 的算法模式(GCM/CBC)与 IV 管理如何? A Cipher 通过已注册 Provider 按算法名查找实现,数据加密推荐 GCM 认证加密,IV 须随机唯一并随密文存储 ✓ 正确答案 B ECB 模式安全,适合加密数据 C IV 可以固定复用,不影响安全 D CBC 模式自带完整性保护,无需额外认证
# 11. Java 的签名与证书,JCA 数字签名、X.509 证书校验与信任链如何? A X.509 证书无需校验有效期 B 证书链验证只需验证根证书 C Signature 实现私钥签名公钥验证,X.509 证书校验重点在有效期/吊销/用途,信任链逐级验证到信任锚点 ✓ 正确答案 D 信任锚点可以是任意自签名证书
# 12. PBKDF2/HKDF 密钥派生函数的用途与参数选择(迭代次数/输出长度) A PBKDF2 与 HKDF 用途完全相同,可互换 B HKDF 用于从密码派生密钥 C 迭代次数越低越安全 D PBKDF2 从密码派生密钥,迭代次数越高抗暴力越强;HKDF 从已有密钥扩展密钥,参数选定输出长度 ✓ 正确答案
# 13. RSA 的 PKCS#1 v1.5 与 OAEP 填充差异,及 ECC 曲线(P-256/X25519)选择 A PKCS#1 v1.5 填充比 OAEP 更安全 B RSA 加密推荐 OAEP 填充(防 Bleichenbacher 攻击),ECC 签名/交换用 P-256、现代密钥交换用 X25519 ✓ 正确答案 C 弱曲线与 P-256 安全性相同 D RSA 加密无需填充
# 14. Java 安全编码规范与静态分析工具,SonarQube、SpotBugs、FindSecBugs 的使用 A SonarQube、SpotBugs 与 FindSecBugs 在 CI 中静态扫描安全缺陷,可纳入质量门禁并配代码评审 ✓ 正确答案 B FindSecBugs 只能检测语法错误 C 安全编码规范只在发布后检查 D 静态分析可替代人工评审与渗透测试
# 15. 密钥管理,KeyStore/JKS/PKCS12、HSM/KMS 集成与密钥轮换的工程实践如何? A 密钥轮换后可立即删除旧密钥,无需保留 B 密钥可以硬编码在代码中以方便使用 C 用 PKCS12/HSM/KMS 安全存储密钥,定期轮换并保留旧密钥版本,最小权限与审计管理 ✓ 正确答案 D 所有密钥应共用同一把,便于管理
# 16. 密钥轮换与安全存储,KMS 集成、环境变量 vs 配置中心如何取舍? A 配置中心明文存 secret 是安全的 B 密钥一旦生成终身使用,无需轮换 C 环境变量无法管理密钥,只能硬编码 D 敏感密钥用 KMS/Vault 管理并支持轮换,环境变量与配置中心都优于硬编码,但 secret 应加密或引用而非明文 ✓ 正确答案
# 17. Java 安全随机数,SecureRandom 的熵源与阻塞/非阻塞模式如何? A getInstanceStrong() 永不阻塞,性能最高 B SecureRandom 只能使用固定种子 C 所有 SecureRandom 都基于同一熵源,无阻塞区别 D 默认 new SecureRandom() 用非阻塞熵源,getInstanceStrong() 用强熵源可能阻塞,适合一次性生成高价值密钥 ✓ 正确答案
# 18. Java 的 TLS 配置,密码套件、协议版本与证书校验的工程实践如何? A 应启用 TLS 1.0 兼容旧客户端 B 密码套件只选最快即可,无需考虑安全性 C 证书校验可省略,只需主机名 D 启用 TLS 1.2/1.3 与 AEAD 前向保密套件,配置证书链验证与主机名验证,禁用弱协议与弱套件 ✓ 正确答案
# 19. 常量时间比较(MessageDigest.isEqual/constant-time)在防时序攻击中的作用 A 普通比较在第一个不同字节提前返回产生时间差,常量时间比较(MessageDigest.isEqual)始终比较全部字节,消除时序差分 ✓ 正确答案 B 普通 equals 比较已足够安全 C 时序攻击只能猜出整个字符串,无法逐字节 D MessageDigest.isEqual 是普通比较,无常量时间保证