如何让客户端获取加密参数?技术方案及问题分析
加密参数同步方案分析
客户端已持有服务器公钥,以下是服务器端的解密实现:
fun decryptChoice(choice: String, iv: ByteArray): String { val privateKey = getPrivateKey() val cipher = Cipher.getInstance(transformation) val oaepParameterSpec = OAEPParameterSpec( MGF1ParameterSpec.SHA512_256.digestAlgorithm, "MGF1", MGF1ParameterSpec.SHA512_256, PSource.PSpecified(iv) ) cipher.init(Cipher.DECRYPT_MODE, privateKey, oaepParameterSpec, SecureRandom()) val decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(choice)) return String(decryptedBytes) }
核心问题
客户端应如何获取transformation算法、AlgorithmParameterSpec等加密参数?
方案1:每次响应附带参数细节
- 做法:在每个包含加密内容的响应中,同步携带加密配置的详细信息
- 弊端:这类参数通常极少变更,重复传输会产生不必要的带宽消耗
方案2:独立配置端点/元数据存储
- 做法:将加密配置单独部署在配置服务器,或作为服务器元数据对外提供
- 弊端:
- 客户端每次处理加密响应前都需要额外调用该端点,增加了请求链路的开销
- 客户端缓存配置后,无法及时获知配置已更新
- 当客户端因使用过期配置导致解密失败时,无法区分是配置过期还是恶意客户端发起的篡改请求
内容的提问来源于stack exchange,提问作者OmniCoder77
相关产品推荐
相关产品推荐

