diff --git a/docs/misc/sign/wbi.md b/docs/misc/sign/wbi.md index 5f46543..4fc802f 100644 --- a/docs/misc/sign/wbi.md +++ b/docs/misc/sign/wbi.md @@ -115,7 +115,7 @@ ## Wbi签名算法实现Demo -该 Demo 提供 [Python](#Python)、[JavaScript](#JavaScript)、[Golang](#Golang)、[C#](#CSharp) 语言 +该 Demo 提供 [Python](#Python)、[JavaScript](#JavaScript)、[Golang](#Golang)、[C#](#CSharp) 语言、[Java](#Java) ### Python @@ -518,4 +518,62 @@ class Program ``` bar=514&baz=1919810&foo=114&wts=1687541921&w_rid=26e82b1b9b3a11dbb1807a9228a40d3b +``` + +### Java + +需要 `hutool` 依赖 + +```java +package com.example.demo; + +import cn.hutool.crypto.SecureUtil; + +import java.util.*; + +public class WbiTest { + private static final int[] mixinKeyEncTab = new int[]{ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 + }; + + public static String getMixinKey(String imgKey, String subKey) { + String s = imgKey + subKey; + StringBuilder key = new StringBuilder(); + for (int i = 0; i < 32; i++) { + key.append(s.charAt(mixinKeyEncTab[i])); + } + return key.toString(); + } + + public static void main(String[] args) { + String imgKey = "653657f524a547ac981ded72ea172057"; + String subKey = "6e4909c702f846728e64f6007736a338"; + String mixinKey = getMixinKey(imgKey, subKey); + System.out.println(mixinKey); + //72136226c6a73669787ee4fd02a74c27 + //{ + // foo: 'one one four', + // bar: '五一四', + // baz: 1919810 + //} + LinkedHashMap map = new LinkedHashMap<>(); + map.put("foo", "one one four"); + map.put("bar", "五一四"); + map.put("baz", 1919810); + map.put("wts", System.currentTimeMillis() / 1000); + StringJoiner param = new StringJoiner("&"); + //排序 + 拼接字符串 + map.entrySet().stream() + .sorted(Map.Entry.comparingByKey()) + .forEach(entry -> param.add(entry.getKey() + "=" + URLUtil.encode(entry.getValue().toString()))); + String s = param + mixinKey; + String wbiSign = SecureUtil.md5(s); + System.out.println(wbiSign); + String finalParam = param + "&w_rid=" + wbiSign; + System.out.println(finalParam); + } +} ``` \ No newline at end of file