AES加解密接口对接文档
概述
本文档描述了如何使用AESUtils类进行数据的加密和解密操作,用于安全数据传输。采用AES-128算法,CBC模式,PKCS5Padding填充方式。
下面的key和iv只是示例测试使用,对接接口需要联系客服获取
加密Key: 请联系客服获取 (示例key:3GfGzOytbL1sd6ntjFI8fw==)加密Iv:请联系客服获取(示例iv:testiv1234567890)IV长度:16
全部接口需要加密传输
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户号 | mchNo | 是 | String | M1621873433953 | 商户号,例如:M1621873433953 |
| 请求数据 | encryptOpenApiData | 是 | String | dGVzdGl2MTIzNDU2Nzg5MFU8gk16WQdmo5ijrUXCLcK4Jrn/g8s3b1JnQPDyszHXjpakD4oJKNs/x8UZoCXMMnIw2o0gNF1l1XVmK6wgsPM= | 加密后的数据 |
请求示例数据
{"mchNo": "M1621873433953","encryptOpenApiData": "dGVzdGl2MTIzNDU2Nzg5MFU8gk16WQdmo5ijrUXCLcK4Jrn/g8s3b1JnQPDyszHXjpakD4oJKNs/x8UZoCXMMnIw2o0gNF1l1XVmK6wgsPM="}
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码 |
| 返回信息 | msg | 否 | String(128) | SUCCESS | 具体内容原因,例如:SUCCESS、参数格式校验错误 |
| 签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回 |
| 返回数据 | encryptData | 否 | String | {dGVzdGl2MTIzNDU2Nzg5MFU8gk16WQdmo5ijrUXCLcK4Jrn/g8s3b1JnQPDyszHXjpakD4oJKNs/x8UZoCXMMnIw2o0gNF1l1XVmK6wgsPM=} | 返回下单数据,需要解密后获得数据 |
返回示例数据
{"code": "0","encryptData": "dGVzdGl2MTIzNDU2Nzg5MFU8gk16WQdmo5ijrUXCLcK4Jrn/g8s3b1JnQPDyszHXjpakD4oJKNs/x8UZoCXMMnIw2o0gNF1l1XVmK6wgsPM=","msg": "SUCCESS","sign": "46D52535A52A30D5523C3C29E526F8EC",}
Java加密示例
/*** AES加密* @param plainText 明文* @param base64Key Base64编码的密钥* @return Base64编码的加密数据(包含IV)*/public static String encrypt(String plainText, String base64Key) throws Exception {// 密钥转换byte[] keyBytes = Base64.getDecoder().decode(base64Key);SecretKeySpec keySpec = new SecretKeySpec(keyBytes, KEY_ALGORITHM);// 使用IVIvParameterSpec ivSpec = new IvParameterSpec(FIXED_IV);// 加密处理Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);byte[] encrypted = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));// 合并IV和密文byte[] combined = new byte[FIXED_IV.length + encrypted.length];System.arraycopy(FIXED_IV, 0, combined, 0, FIXED_IV.length);System.arraycopy(encrypted, 0, combined, FIXED_IV.length, encrypted.length);return Base64.getEncoder().encodeToString(combined);}
Java解密示例
/*** AES解密* @param encryptedText Base64编码的加密数据(含IV)* @param base64Key Base64编码的密钥* @return 解密后的明文*/public static String decrypt(String encryptedText, String base64Key) throws Exception {// 密钥转换byte[] keyBytes = Base64.getDecoder().decode(base64Key);SecretKeySpec keySpec = new SecretKeySpec(keyBytes, KEY_ALGORITHM);// 分离IV和密文byte[] combined = Base64.getDecoder().decode(encryptedText);byte[] ivBytes = Arrays.copyOfRange(combined, 0, 16);byte[] encryptedBytes = new byte[combined.length - IV_LENGTH];System.arraycopy(combined, 0, ivBytes, 0, IV_LENGTH);System.arraycopy(combined, IV_LENGTH, encryptedBytes, 0, encryptedBytes.length);IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);// 解密处理Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);byte[] decrypted = cipher.doFinal(encryptedBytes);return new String(decrypted, StandardCharsets.UTF_8);}
使用示例
public static void main(String[] args) throws Exception {String originalText = "{\"date\":\"2025-04-03 11:05:32\",\"content\":\"腾聚欢迎你\"}";// 加密String encrypted = encrypt(originalText, AESUtils.key);System.out.println("Encrypted: " + encrypted);// 解密String decrypted = decrypt(encrypted, AESUtils.key);System.out.println("Decrypted: " + decrypted);}
