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

XFEstudio/bilibili-API-collect

添加Wbi签名的Java实现 (#722)

a874285
7rikka <takanashirikkax@gmail.com>
提交于

代码差异

1 个文件 +57 -0
Modified docs/misc/sign/wbi.md +57 -0
@@ -422,3 +422,60 @@ func main() {
422 422 fmt.Println(string(body))
423 423 }
424 424 ```
425 ### Java
426
427 需要 `hutool` 依赖
428
429 ```java
430 package com.example.demo;
431
432 import cn.hutool.crypto.SecureUtil;
433
434 import java.util.*;
435
436 public class WbiTest {
437 private static final int[] mixinKeyEncTab = new int[]{
438 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
439 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
440 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
441 36, 20, 34, 44, 52
442 };
443
444 public static String getMixinKey(String imgKey, String subKey) {
445 String s = imgKey + subKey;
446 StringBuilder key = new StringBuilder();
447 for (int i = 0; i < 32; i++) {
448 key.append(s.charAt(mixinKeyEncTab[i]));
449 }
450 return key.toString();
451 }
452
453 public static void main(String[] args) {
454 String imgKey = "653657f524a547ac981ded72ea172057";
455 String subKey = "6e4909c702f846728e64f6007736a338";
456 String mixinKey = getMixinKey(imgKey, subKey);
457 System.out.println(mixinKey);
458 //72136226c6a73669787ee4fd02a74c27
459 //{
460 // foo: '114',
461 // bar: '514',
462 // zab: 1919810
463 //}
464 LinkedHashMap<String, Object> map = new LinkedHashMap<>();
465 map.put("foo", "114");
466 map.put("bar", "514");
467 map.put("zab", 1919810);
468 map.put("wts", System.currentTimeMillis() / 1000);
469 StringJoiner param = new StringJoiner("&");
470 //排序 + 拼接字符串
471 map.entrySet().stream()
472 .sorted(Map.Entry.comparingByKey())
473 .forEach(entry -> param.add(entry.getKey() + "=" + entry.getValue().toString()));
474 String s = param + mixinKey;
475 String wbiSign = SecureUtil.md5(s);
476 System.out.println(wbiSign);
477 String finalParam = param + "&w_rid=" + wbiSign;
478 System.out.println(finalParam);
479 }
480 }
481 ```