diff --git a/login/login_action/password.md b/login/login_action/password.md index 8dab22a..7be6b78 100644 --- a/login/login_action/password.md +++ b/login/login_action/password.md @@ -47,19 +47,19 @@ SSO登录页面跳转() 根对象: -| 字段 | 类型 | 内容 | 备注 | -| ------- | ---- | -------- | ------- | -| code | num | 返回值 | 0:成功 | -| message | str | 错误信息 | | -| ttl | num | 1 | | -| data | obj | 信息本体 | | +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|------|------| +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | | +| ttl | num | 1 | | +| data | obj | 信息本体 | | `data`对象: -| 字段 | 类型 | 内容 | 备注 | -| ---- | ---- | -------- | ------------------------------------------------------------ | -| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | -| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|------------------------------------------| +| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | +| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | **示例:** @@ -113,21 +113,21 @@ curl 'http://passport.bilibili.com/x/passport-login/web/key' 根对象: -| 字段 | 类型 | 内容 | 备注 | -| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | -| code | num | 返回值 | 0:成功
-105:验证码错误
-400:请求错误
-629:账号或密码错误
-653:用户名或密码不能为空
-662:提交超时,请重新提交
-2001:缺少必要的的参数
-2100:需验证手机号或邮箱
2400:登录秘钥错误
2406:验证极验服务出错
86000:RSA解密失败 | -| message | str | 错误信息 | | -| data | 成功时:obj
失败时:null | 数据本体 | | +| 字段 | 类型 | 内容 | 备注 | +|---------|-----------------------|------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-105:验证码错误
-400:请求错误
-629:账号或密码错误
-653:用户名或密码不能为空
-662:提交超时,请重新提交
-2001:缺少必要的的参数
-2100:需验证手机号或邮箱
2400:登录秘钥错误
2406:验证极验服务出错
86000:RSA解密失败 | +| message | str | 错误信息 | | +| data | 成功时:obj
失败时:null | 数据本体 | | data 对象: -| 字段 | 类型 | 内容 | 备注 | -| ------------- | ---- | -------------------- | ---------------------------------- | -| message | str | 扫码状态信息 | | -| refresh_token | str | 刷新`refresh_token` | | -| status | num | 0 | | -| timestamp | num | 登录时间 | 未登录为`0`
时间戳 单位为毫秒 | -| url | str | 游戏分站跨域登录 url | | +| 字段 | 类型 | 内容 | 备注 | +|---------------|-----|-------------------|------------------------| +| message | str | 扫码状态信息 | | +| refresh_token | str | 刷新`refresh_token` | | +| status | num | 0 | | +| timestamp | num | 登录时间 | 未登录为`0`
时间戳 单位为毫秒 | +| url | str | 游戏分站跨域登录 url | | **示例:** @@ -174,7 +174,6 @@ curl 'http://passport.bilibili.com/x/passport-login/web/login' \
查看响应示例: - ```http HTTP/1.1 200 OK Date: Mon, 13 Jul 2020 06:56:00 GMT @@ -208,10 +207,10 @@ X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01 根对象: -| 字段 | 类型 | 内容 | 备注 | -|---------|-----|--------|-----------------| -| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | -| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|------------------------------------------| +| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | +| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | **示例:** @@ -244,6 +243,7 @@ curl 'http://passport.bilibili.com/login?act=getkey' **正文参数 (application/x-www-form-urlencoded ):** + | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ----------- | ---- | ---------------------- | ------ | ------------------------------------------------------------ | | captchaType | num | 6 | 必要 | 必须为`6` | @@ -261,38 +261,38 @@ curl 'http://passport.bilibili.com/login?act=getkey' 根对象: -| 字段 | 类型 | 内容 | 备注 | -| ------- | ---- | ---------- | ------------------------------------------------------------ | -| code | num | 返回值 | 0:成功
-400:请求错误
-629:账号或密码错误
-653:用户名或密码不能为空
-662:提交超时,请重新提交
-2001:缺少必要的的参数
-2100:需验证手机号或邮箱
2400:登录秘钥错误
2406:验证极验服务出错
86000:RSA解密失败 | -| ts | num | 当前时间戳 | 成功时无此项 | -| message | str | 错误信息 | 默认为0 | -| data | obj | 数据本体 | 成功时有此项 | +| 字段 | 类型 | 内容 | 备注 | +|---------|-----|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| code | num | 返回值 | 0:成功
-400:请求错误
-629:账号或密码错误
-653:用户名或密码不能为空
-662:提交超时,请重新提交
-2001:缺少必要的的参数
-2100:需验证手机号或邮箱
2400:登录秘钥错误
2406:验证极验服务出错
86000:RSA解密失败 | +| ts | num | 当前时间戳 | 成功时无此项 | +| message | str | 错误信息 | 默认为0 | +| data | obj | 数据本体 | 成功时有此项 | `data`对象: **未登录时:** -| 字段 | 类型 | 内容 | 备注 | -| ----------- | ---- | -------------------- | ---- | -| redirectUrl | str | 游戏分站跨域登录 url | | +| 字段 | 类型 | 内容 | 备注 | +|-------------|-----|--------------|-----| +| redirectUrl | str | 游戏分站跨域登录 url | | **已登录时:** -| 字段 | 类型 | 内容 | 备注 | -| ------- | ---- | ------------------------ | ---- | -| isLogin | bool | true | | -| goUrl | str | https://www.bilibili.com | | +| 字段 | 类型 | 内容 | 备注 | +|---------|------|--------------------------|-----| +| isLogin | bool | true | | +| goUrl | str | https://www.bilibili.com | | **需验证手机号或邮箱时** -| 字段 | 类型 | 内容 | 备注 | -| -------- | ---- | ------------------------ | ---------------- | -| mid | num | 用户 mid | | -| tel | str | 绑定的手机号 | 星号隐藏部分信息 | -| email | str | 绑定的邮箱 | 星号隐藏部分信息 | -| sorce | num | 0 | **作用尚不明确** | -| keeptime | num | 1 | **作用尚不明确** | -| goUrl | str | https://www.bilibili.com | | +| 字段 | 类型 | 内容 | 备注 | +|----------|-----|--------------------------|------------| +| mid | num | 用户 mid | | +| tel | str | 绑定的手机号 | 星号隐藏部分信息 | +| email | str | 绑定的邮箱 | 星号隐藏部分信息 | +| sorce | num | 0 | **作用尚不明确** | +| keeptime | num | 1 | **作用尚不明确** | +| goUrl | str | https://www.bilibili.com | | **示例:** @@ -332,7 +332,6 @@ curl 'https://passport.bilibili.com/web/login/v2' \
查看响应示例: - ```http HTTP/1.1 200 OK Date: Mon, 13 Jul 2020 06:56:00 GMT @@ -364,19 +363,19 @@ X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01 **正文参数( application/x-www-form-urlencoded ):** -| 参数名 | 类型 | 内容 | 必要性 | 备注 | -| ------ | ---- | ------- | ----------- | ---- | -| appkey | str | APP密钥 | APP方式必要 | | -| sign | str | APP签名 | APP方式必要 | | +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +|--------|-----|-------|---------|-----| +| appkey | str | APP密钥 | APP方式必要 | | +| sign | str | APP签名 | APP方式必要 | | **json回复:** 根对象: -| 字段 | 类型 | 内容 | 备注 | -| ---- | ---- | -------- | ------------------------------------------------------------ | -| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | -| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | +| 字段 | 类型 | 内容 | 备注 | +|------|-----|--------|------------------------------------------| +| hash | str | 密码盐值 | 有效时间为 20s
恒为 16 字符
需要拼接在明文密码之前 | +| key | str | rsa 公钥 | PEM 格式编码
加密密码时需要使用 | **示例:** @@ -463,3 +462,38 @@ print('result =', b64Password) result = fZzUzYiSp96F26tt19MIAkB4b4Wk4RHQb4ADLiTIbL66O/7upyj4U5UekTA2pB3Pjr6NlEGGc/kiEgwTNbu84d4bkAkpUOupj1hZXYMYgWYKOtvhvugeuhwgRDhkfUIX+YrwaScxpcQFJqo7bvh7oDL/Wc5sVdWvikpL3PFAvJM= ``` +以下为密码加密的Java实现: + +```java +package com.ho.test; + +import cn.hutool.core.codec.Base64; + +import javax.crypto.Cipher; +import java.security.KeyFactory; +import java.security.PublicKey; +import java.security.spec.X509EncodedKeySpec; + +public class Test3 { + public static void main(String[] args) throws Exception { + //用户密码 + String password = "abcdef"; + //获取到的证书内容 + String key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"; + //获取到的盐值 + String hash = "bb73382121594c46"; + String[] split = key.strip().split("\n"); + String newKey = split[1] + split[2] + split[3] + split[4]; + //进行加密 + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(newKey)); + PublicKey publicKey = keyFactory.generatePublic(keySpec); + Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); + cipher.init(Cipher.PUBLIC_KEY, publicKey); + byte[] bytes = cipher.doFinal((hash + password).getBytes()); + String encode = Base64.encode(bytes); + System.out.println(encode); + } +} + +``` \ No newline at end of file