返回提交历史
Modified
login/login_action/password.md
+91
-57
XFEstudio/bilibili-API-collect
添加密码加密的Java实现 (#498)
Co-authored-by: 社会易姐QwQ <45892418+SocialSisterYi@users.noreply.github.com>
94f2018
代码差异
1 个文件
+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
```