XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/bilibili-API-collect

feature: App Sign 添加java版本实现 (#729)

* feature: App Sign 添加java版本实现 * modify: 优化签名代码以及文档

901e787
cctyl <34262992+cctyl@users.noreply.github.com>
提交于

代码差异

1 个文件 +69 -1
Modified docs/misc/sign/APP.md +69 -1
@@ -23,7 +23,7 @@
23 23
24 24 ## Demo
25 25
26 该 Demo 提供 [Python](#Python) 语言例程
26 该 Demo 提供 [Python](#Python) 和 [Java](#Java) 语言例程
27 27
28 28 使用 appkey = `1d8b6e7d45233436`, appsec = `560c52ccd288fed045859ed18bffd973` 对如下 `params` 参数进行签名
29 29
@@ -63,3 +63,71 @@ print(query)
63 63 {'appkey': '1d8b6e7d45233436', 'id': 114514, 'str': '1919810', 'test': 'いいよ,こいよ', 'sign': '01479cf20504d865519ac50f33ba3a7d'}
64 64 appkey=1d8b6e7d45233436&id=114514&str=1919810&test=%E3%81%84%E3%81%84%E3%82%88%EF%BC%8C%E3%81%93%E3%81%84%E3%82%88&sign=01479cf20504d865519ac50f33ba3a7d
65 65 ```
66
67 ### Java
68
69
70 ```java
71 package io.github.cctyl;
72
73 import java.nio.charset.StandardCharsets;
74 import java.util.HashMap;
75 import java.util.Map;
76 import java.security.MessageDigest;
77 import java.security.NoSuchAlgorithmException;
78 import java.net.URLEncoder;
79 import java.util.TreeMap;
80
81 /**
82 * @author cctyl
83 */
84 public class AppSigner {
85
86 private static final String APP_KEY = "1d8b6e7d45233436";
87 private static final String APP_SEC = "560c52ccd288fed045859ed18bffd973";
88
89 public static String appSign(Map<String, String> params) {
90 // 为请求参数进行 APP 签名
91 params.put("appkey", APP_KEY);
92 // 按照 key 重排参数
93 Map<String, String> sortedParams = new TreeMap<>(params);
94 // 序列化参数
95 StringBuilder queryBuilder = new StringBuilder();
96 for (Map.Entry<String, String> entry : sortedParams.entrySet()) {
97 if (queryBuilder.length() > 0) {
98 queryBuilder.append('&');
99 }
100 queryBuilder
101 .append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
102 .append('=')
103 .append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
104 }
105 return generateMD5(queryBuilder .append(APP_SEC).toString());
106 }
107
108 private static String generateMD5(String input) {
109 try {
110 MessageDigest md = MessageDigest.getInstance("MD5");
111 byte[] digest = md.digest(input.getBytes());
112 StringBuilder sb = new StringBuilder();
113 for (byte b : digest) {
114 sb.append(String.format("%02x", b));
115 }
116 return sb.toString();
117 } catch (NoSuchAlgorithmException e) {
118 e.printStackTrace();
119 }
120 return null;
121 }
122
123 public static void main(String[] args) {
124 Map<String, String> params = new HashMap<>();
125 params.put("id", "114514");
126 params.put("str", "1919810");
127 params.put("test", "いいよ,こいよ");
128 System.out.println(appSign(params));
129 }
130 }
131 ```
132
133 输出结果为:01479cf20504d865519ac50f33ba3a7d