接口加密 3.5 生成请求体 //未启用加密功能时的请求体json串,查询对应接口文档确定格式 String body "{"ImageData":"imagedatabase64xxxx"}"; //控制台应用详情下获取的公钥 String encKey "xxxxxxx"; Map requestBody new HashMap<>(); //公钥转换为字节数组备用 byte[] publicKey Base64.decodeBase64(encKey); //生成ciphertextBlob字段 byte[] sm4Key SM4Util.generateKey(); requestBody.put("ciphertextBlob", Base64.encodeBase64String(SM2Util.encrypt(publicKey, sm4Key))); //生成encryptedBody字段 requestBody.put("encryptedBody", Base64.encodeBase64String(SM4Util.encrypt(sm4Key, body.getBytes()))); //生成Hmacsm3密钥 byte[] hmacSm3Key HmacSM3Util.generateRandomKey(16); //生成encryptedHashKey字段 requestBody.put("encryptedHashKey", Base64.encodeBase64String(SM2Util.encrypt(publicKey, hmacSm3Key))); //生成ciphertextBlobHash字段 requestBody.put("ciphertextBlobHash", Base64.encodeBase64String(HmacSM3Util.hmacSM3(hmacSm3Key, requestBody.get("ciphertextBlob").getBytes()))); //生成encryptedBodyHash字段 requestBody.put("encryptedBodyHash", Base64.encodeBase64String(HmacSM3Util.hmacSM3(hmacSm3Key, requestBody.get("encryptedBody").getBytes()))); //TODO requestBody即为加密请求体,遵循鉴权逻辑调用接口即可,鉴权部分逻辑请参考鉴权相关说明文档