数据格式
* @param args* 撞库---入参加密字段signs加密前格式** {* "mobileMask": "134123412**",* "city": "武汉",* "system": "qxh"* }** 撞库---返回加密字段signs加密前格式* {* "md5List": [* "01f32b38b7b208a574c512a40d30cff0",* "01f32b38b7b208a574c512a40d30cff0"* ]* }
java版
import cn.hutool.crypto.SecureUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.Data; import lombok.experimental.Accessors;import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Map;public class Demo {/*** 引入依赖* <dependency>* <groupId>cn.hutool</groupId>* <artifactId>hutool-all</artifactId>* <version>5.6.5<</version>* </dependency>** @param args* 撞库---入参加密字段signs加密前格式** {* "mobileMask": "134123412**",* "city": "武汉",* "system": "qxh"* }** 撞库---返回加密字段signs加密前格式* {* "md5List": [* "01f32b38b7b208a574c512a40d30cff0",* "01f32b38b7b208a574c512a40d30cff0"* ]* }*/public static void main(String[] args) {//撞库-----------------------------------------------------------------String checkUrl = "撞库url";String timestamp = String.valueOf(System.currentTimeMillis());String key = String.format("%s%s", "MCXBIjANke", timestamp).substring(0, 16);CheckVO checkVO = new CheckVO();checkVO.setMobileMask("134123412**").setCity("武汉").setSystem("qxh");String signs = SecureUtil.aes(key.getBytes(StandardCharsets.UTF_8)).encryptHex(JSONUtil.toJsonStr(checkVO));Map<String, Object> map = new HashMap<>();map.put("timestamp", timestamp);map.put("signs", signs);String resultData = HttpUtil.createPost(checkUrl).contentType("application/json").body(JSONUtil.toJsonPrettyStr(map)).timeout(5000).execute().body();//请求完成---------------解析结果JSONObject jsonObject = JSONUtil.parseObj(resultData);String result = jsonObject.getStr("result");JSONObject data = jsonObject.getJSONObject("data");String signsReturn = data.getStr("signs");//-----------解密String decryptStr = SecureUtil.aes(key.getBytes(StandardCharsets.UTF_8)).decryptStr(signsReturn);JSONObject md5Map = JSONUtil.parseObj(decryptStr);JSONArray md5Array = md5Map.getJSONArray("md5List");List<String> md5List = md5Array.toList(String.class);System.out.println(JSONUtil.toJsonStr(md5List));//撞库----------------------------------------------------------------- }@Data@Accessors(chain = true)public static class CheckVO {private String mobileMask;private String city;private String system;} }
php版
代码在线运行网址 https://www.cainiaojc.com/tool/php/
<?php $key = 'MCXBIjANke172760'; // 生成一个随机的16字节密钥 $data = '{"md5List":[]}';// 使用 PKCS5Padding $padding = 16 - (strlen($data) % 16); $dataPadded = $data . str_repeat(chr($padding), $padding);// 加密 $encrypted = openssl_encrypt($dataPadded, "AES-128-ECB", $key, OPENSSL_RAW_DATA, openssl_random_pseudo_bytes(16));// 加密后的数据通常需要进行 base64 编码以便存储或传输 $encryptedBase64 = base64_encode($encrypted); $encryptedHex = bin2hex($encrypted); echo "加密后的数据(Base64): " . $encryptedHex . "\n";// 解密 $decrypted = openssl_decrypt($encrypted, "AES-128-ECB", $key, OPENSSL_RAW_DATA, substr($encrypted, 0, 16));// 移除填充 $pad = ord($decrypted[strlen($decrypted) - 1]); $decrypted = substr($decrypted, 0, -1 * $pad);echo "解密后的数据: " . $decrypted . "\n"; ?>