返回提交历史
Modified
docs/misc/sign/APP.md
+69
-1
XFEstudio/bilibili-API-collect
feature: App Sign 添加java版本实现 (#729)
* feature: App Sign 添加java版本实现 * modify: 优化签名代码以及文档
901e787
代码差异
1 个文件
+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