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

XFEstudio/bilibili-API-collect

添加密码加密的Java实现 (#498)

Co-authored-by: 社会易姐QwQ <45892418+SocialSisterYi@users.noreply.github.com>

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

代码差异

1 个文件 +91 -57
Modified login/login_action/password.md +91 -57
@@ -47,19 +47,19 @@ SSO登录页面跳转()
47 47
48 48 根对象:
49 49
50 | 字段 | 类型 | 内容 | 备注 |
51 | ------- | ---- | -------- | ------- |
52 | code | num | 返回值 | 0:成功 |
53 | message | str | 错误信息 | |
54 | ttl | num | 1 | |
55 | data | obj | 信息本体 | |
50 | 字段 | 类型 | 内容 | 备注 |
51 |---------|-----|------|------|
52 | code | num | 返回值 | 0:成功 |
53 | message | str | 错误信息 | |
54 | ttl | num | 1 | |
55 | data | obj | 信息本体 | |
56 56
57 57 `data`对象:
58 58
59 | 字段 | 类型 | 内容 | 备注 |
60 | ---- | ---- | -------- | ------------------------------------------------------------ |
61 | hash | str | 密码盐值 | 有效时间为 20s<br />恒为 16 字符<br />需要拼接在明文密码之前 |
62 | key | str | rsa 公钥 | PEM 格式编码<br />加密密码时需要使用 |
59 | 字段 | 类型 | 内容 | 备注 |
60 |------|-----|--------|------------------------------------------|
61 | hash | str | 密码盐值 | 有效时间为 20s<br />恒为 16 字符<br />需要拼接在明文密码之前 |
62 | key | str | rsa 公钥 | PEM 格式编码<br />加密密码时需要使用 |
63 63
64 64 **示例:**
65 65
@@ -113,21 +113,21 @@ curl 'http://passport.bilibili.com/x/passport-login/web/key'
113 113
114 114 根对象:
115 115
116 | 字段 | 类型 | 内容 | 备注 |
117 | ------- | ----------------------------- | -------- | ------------------------------------------------------------ |
118 | code | num | 返回值 | 0:成功<br />-105:验证码错误<br />-400:请求错误<br />-629:账号或密码错误<br />-653:用户名或密码不能为空<br />-662:提交超时,请重新提交<br />-2001:缺少必要的的参数<br />-2100:需验证手机号或邮箱<br />2400:登录秘钥错误<br />2406:验证极验服务出错<br />86000:RSA解密失败 |
119 | message | str | 错误信息 | |
120 | data | 成功时:obj<br />失败时:null | 数据本体 | |
116 | 字段 | 类型 | 内容 | 备注 |
117 |---------|-----------------------|------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
118 | code | num | 返回值 | 0:成功<br />-105:验证码错误<br />-400:请求错误<br />-629:账号或密码错误<br />-653:用户名或密码不能为空<br />-662:提交超时,请重新提交<br />-2001:缺少必要的的参数<br />-2100:需验证手机号或邮箱<br />2400:登录秘钥错误<br />2406:验证极验服务出错<br />86000:RSA解密失败 |
119 | message | str | 错误信息 | |
120 | data | 成功时:obj<br />失败时:null | 数据本体 | |
121 121
122 122 data 对象:
123 123
124 | 字段 | 类型 | 内容 | 备注 |
125 | ------------- | ---- | -------------------- | ---------------------------------- |
126 | message | str | 扫码状态信息 | |
127 | refresh_token | str | 刷新`refresh_token` | |
128 | status | num | 0 | |
129 | timestamp | num | 登录时间 | 未登录为`0`<br />时间戳 单位为毫秒 |
130 | url | str | 游戏分站跨域登录 url | |
124 | 字段 | 类型 | 内容 | 备注 |
125 |---------------|-----|-------------------|------------------------|
126 | message | str | 扫码状态信息 | |
127 | refresh_token | str | 刷新`refresh_token` | |
128 | status | num | 0 | |
129 | timestamp | num | 登录时间 | 未登录为`0`<br />时间戳 单位为毫秒 |
130 | url | str | 游戏分站跨域登录 url | |
131 131
132 132 **示例:**
133 133
@@ -174,7 +174,6 @@ curl 'http://passport.bilibili.com/x/passport-login/web/login' \
174 174 <details>
175 175 <summary>查看响应示例:</summary>
176 176
177
178 177 ```http
179 178 HTTP/1.1 200 OK
180 179 Date: Mon, 13 Jul 2020 06:56:00 GMT
@@ -208,10 +207,10 @@ X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
208 207
209 208 根对象:
210 209
211 | 字段 | 类型 | 内容 | 备注 |
212 |---------|-----|--------|-----------------|
213 | hash | str | 密码盐值 | 有效时间为 20s<br />恒为 16 字符<br />需要拼接在明文密码之前 |
214 | key | str | rsa 公钥 | PEM 格式编码<br />加密密码时需要使用 |
210 | 字段 | 类型 | 内容 | 备注 |
211 |------|-----|--------|------------------------------------------|
212 | hash | str | 密码盐值 | 有效时间为 20s<br />恒为 16 字符<br />需要拼接在明文密码之前 |
213 | key | str | rsa 公钥 | PEM 格式编码<br />加密密码时需要使用 |
215 214
216 215 **示例:**
217 216
@@ -244,6 +243,7 @@ curl 'http://passport.bilibili.com/login?act=getkey'
244 243
245 244 **正文参数 (application/x-www-form-urlencoded ):**
246 245
246
247 247 | 参数名 | 类型 | 内容 | 必要性 | 备注 |
248 248 | ----------- | ---- | ---------------------- | ------ | ------------------------------------------------------------ |
249 249 | captchaType | num | 6 | 必要 | 必须为`6` |
@@ -261,38 +261,38 @@ curl 'http://passport.bilibili.com/login?act=getkey'
261 261
262 262 根对象:
263 263
264 | 字段 | 类型 | 内容 | 备注 |
265 | ------- | ---- | ---------- | ------------------------------------------------------------ |
266 | code | num | 返回值 | 0:成功<br />-400:请求错误<br />-629:账号或密码错误<br />-653:用户名或密码不能为空<br />-662:提交超时,请重新提交<br />-2001:缺少必要的的参数<br />-2100:需验证手机号或邮箱<br />2400:登录秘钥错误<br />2406:验证极验服务出错<br />86000:RSA解密失败 |
267 | ts | num | 当前时间戳 | 成功时无此项 |
268 | message | str | 错误信息 | 默认为0 |
269 | data | obj | 数据本体 | 成功时有此项 |
264 | 字段 | 类型 | 内容 | 备注 |
265 |---------|-----|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
266 | code | num | 返回值 | 0:成功<br />-400:请求错误<br />-629:账号或密码错误<br />-653:用户名或密码不能为空<br />-662:提交超时,请重新提交<br />-2001:缺少必要的的参数<br />-2100:需验证手机号或邮箱<br />2400:登录秘钥错误<br />2406:验证极验服务出错<br />86000:RSA解密失败 |
267 | ts | num | 当前时间戳 | 成功时无此项 |
268 | message | str | 错误信息 | 默认为0 |
269 | data | obj | 数据本体 | 成功时有此项 |
270 270
271 271 `data`对象:
272 272
273 273 **未登录时:**
274 274
275 | 字段 | 类型 | 内容 | 备注 |
276 | ----------- | ---- | -------------------- | ---- |
277 | redirectUrl | str | 游戏分站跨域登录 url | |
275 | 字段 | 类型 | 内容 | 备注 |
276 |-------------|-----|--------------|-----|
277 | redirectUrl | str | 游戏分站跨域登录 url | |
278 278
279 279 **已登录时:**
280 280
281 | 字段 | 类型 | 内容 | 备注 |
282 | ------- | ---- | ------------------------ | ---- |
283 | isLogin | bool | true | |
284 | goUrl | str | https://www.bilibili.com | |
281 | 字段 | 类型 | 内容 | 备注 |
282 |---------|------|--------------------------|-----|
283 | isLogin | bool | true | |
284 | goUrl | str | https://www.bilibili.com | |
285 285
286 286 **需验证手机号或邮箱时**
287 287
288 | 字段 | 类型 | 内容 | 备注 |
289 | -------- | ---- | ------------------------ | ---------------- |
290 | mid | num | 用户 mid | |
291 | tel | str | 绑定的手机号 | 星号隐藏部分信息 |
292 | email | str | 绑定的邮箱 | 星号隐藏部分信息 |
293 | sorce | num | 0 | **作用尚不明确** |
294 | keeptime | num | 1 | **作用尚不明确** |
295 | goUrl | str | https://www.bilibili.com | |
288 | 字段 | 类型 | 内容 | 备注 |
289 |----------|-----|--------------------------|------------|
290 | mid | num | 用户 mid | |
291 | tel | str | 绑定的手机号 | 星号隐藏部分信息 |
292 | email | str | 绑定的邮箱 | 星号隐藏部分信息 |
293 | sorce | num | 0 | **作用尚不明确** |
294 | keeptime | num | 1 | **作用尚不明确** |
295 | goUrl | str | https://www.bilibili.com | |
296 296
297 297 **示例:**
298 298
@@ -332,7 +332,6 @@ curl 'https://passport.bilibili.com/web/login/v2' \
332 332 <details>
333 333 <summary>查看响应示例:</summary>
334 334
335
336 335 ```http
337 336 HTTP/1.1 200 OK
338 337 Date: Mon, 13 Jul 2020 06:56:00 GMT
@@ -364,19 +363,19 @@ X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
364 363
365 364 **正文参数( application/x-www-form-urlencoded ):**
366 365
367 | 参数名 | 类型 | 内容 | 必要性 | 备注 |
368 | ------ | ---- | ------- | ----------- | ---- |
369 | appkey | str | APP密钥 | APP方式必要 | |
370 | sign | str | APP签名 | APP方式必要 | |
366 | 参数名 | 类型 | 内容 | 必要性 | 备注 |
367 |--------|-----|-------|---------|-----|
368 | appkey | str | APP密钥 | APP方式必要 | |
369 | sign | str | APP签名 | APP方式必要 | |
371 370
372 371 **json回复:**
373 372
374 373 根对象:
375 374
376 | 字段 | 类型 | 内容 | 备注 |
377 | ---- | ---- | -------- | ------------------------------------------------------------ |
378 | hash | str | 密码盐值 | 有效时间为 20s<br />恒为 16 字符<br />需要拼接在明文密码之前 |
379 | key | str | rsa 公钥 | PEM 格式编码<br />加密密码时需要使用 |
375 | 字段 | 类型 | 内容 | 备注 |
376 |------|-----|--------|------------------------------------------|
377 | hash | str | 密码盐值 | 有效时间为 20s<br />恒为 16 字符<br />需要拼接在明文密码之前 |
378 | key | str | rsa 公钥 | PEM 格式编码<br />加密密码时需要使用 |
380 379
381 380 **示例:**
382 381
@@ -463,3 +462,38 @@ print('result =', b64Password)
463 462 result = fZzUzYiSp96F26tt19MIAkB4b4Wk4RHQb4ADLiTIbL66O/7upyj4U5UekTA2pB3Pjr6NlEGGc/kiEgwTNbu84d4bkAkpUOupj1hZXYMYgWYKOtvhvugeuhwgRDhkfUIX+YrwaScxpcQFJqo7bvh7oDL/Wc5sVdWvikpL3PFAvJM=
464 463 ```
465 464
465 以下为密码加密的Java实现:
466
467 ```java
468 package com.ho.test;
469
470 import cn.hutool.core.codec.Base64;
471
472 import javax.crypto.Cipher;
473 import java.security.KeyFactory;
474 import java.security.PublicKey;
475 import java.security.spec.X509EncodedKeySpec;
476
477 public class Test3 {
478 public static void main(String[] args) throws Exception {
479 //用户密码
480 String password = "abcdef";
481 //获取到的证书内容
482 String key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n";
483 //获取到的盐值
484 String hash = "bb73382121594c46";
485 String[] split = key.strip().split("\n");
486 String newKey = split[1] + split[2] + split[3] + split[4];
487 //进行加密
488 KeyFactory keyFactory = KeyFactory.getInstance("RSA");
489 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(newKey));
490 PublicKey publicKey = keyFactory.generatePublic(keySpec);
491 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
492 cipher.init(Cipher.PUBLIC_KEY, publicKey);
493 byte[] bytes = cipher.doFinal((hash + password).getBytes());
494 String encode = Base64.encode(bytes);
495 System.out.println(encode);
496 }
497 }
498
499 ```