部分受限业务接口可能涉及入参字段的敏感信息加密处理(如涉及,API接口字段中会标注说明)。如开发者涉及使用对应业务接口,请联系华为侧工程师,获取对应的SM2加密公钥。
涉及密钥:
密钥类型 | 来源 | 作用 |
|---|---|---|
SM2 | 华为支付提供。 | 加密开发者生成的SM4密钥。 |
SM4 | 开发者生成。 | 加密敏感信息字段。 |
处理逻辑:
1、开发者生成SM4对称密钥,用于加密敏感数据内容并作为入参传递给华为支付。
2、开发者使用华为支付提供的SM2密钥加密生成的SM4对称密钥并通过PayMercAuth.sessionKey字段传递给华为支付用于解密敏感信息。
本质为SM4对称密钥加密。示例代码如下:
// 终端信息, 任何终端信息都没有也要new Terminal()对象传入 Terminal terminal = Terminal.builder() .deviceIP("128.0.0.1") .deviceCategory("APP")//设备分类APP,H5,PC .networkingMode("WIFI") .accessMode("APP") .build(); String terminalString = JSONObject.toJSONString(terminal); // 4. 生成sessionKey, 加密terminal字段传入 String sessionKey = SM4Util.getSM4GCMSessionKey(); // 对sessionKey进行保护, 使用服务端提供的公钥进行加密 String encryptSessionKey = Sm2Utils.encrypt(DemoKeys.HW_PAY_PUBLIC_KEY_FOR_APP, sessionKey); // 加密请求敏感字段 String encryptedTerminalString = SM4Util.getSM4GCMContent(sessionKey, terminalString); // 把加密后的terminal设置到请求body request.setTerminal(encryptedTerminalString);