Files

219 lines
86 KiB
JavaScript
Raw Permalink Normal View History

2026-01-22 17:37:01 +00:00
import{_ as p,c as d,a as o,b as s,d as a,e,w as t,r,o as i}from"./app-Dgsdh8A6.js";const c={};function D(u,n){const l=r("RouteLink");return i(),d("div",null,[n[43]||(n[43]=o(`<h1 id="密�登录" tabindex="-1"><a class="header-anchor" href="#密�登录"><span>密�登录</span></a></h1><h2 id="密�登录�程-伪代�" tabindex="-1"><a class="header-anchor" href="#密�登录�程-伪代�"><span>密�登录�程(伪代�)</span></a></h2><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-python"><span class="line"><span style="color:#D4D4D4;">账� = </span><span style="color:#CE9178;">&#39;2333333&#39;</span></span>
<span class="line"><span style="color:#D4D4D4;">密�字符串 = </span><span style="color:#CE9178;">&#39;password&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955;"># 1.人机验�步骤</span></span>
<span class="line"><span style="color:#D4D4D4;">token, gt, challenge = 获�验��()</span></span>
<span class="line"><span style="color:#D4D4D4;">validate = 填写验��(gt, challenge) </span><span style="color:#6A9955;"># 这一步填写验�� (访问�验API,得到validate)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955;"># 2.密�加密步骤</span></span>
<span class="line"><span style="color:#D4D4D4;">pubkey, salt = 获�公钥和�()</span></span>
<span class="line"><span style="color:#D4D4D4;">加密�的密� = RSA公钥加密(pubkey, salt+密�字符串) </span><span style="color:#6A9955;"># �需�加在密�字符串�</span></span>
<span class="line"><span style="color:#D4D4D4;">base64编��的密文 = base64编�(加密�的密�)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955;"># 3.开始登录</span></span>
<span class="line"><span style="color:#D4D4D4;">cookie = 密�登录(账�, base64编��的密文, token, challenge, validate)</span></span>
<span class="line"><span style="color:#D4D4D4;">存储cookie(cookie)</span></span>
<span class="line"><span style="color:#D4D4D4;">SSO登录页�跳转()</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="web端密�登录" tabindex="-1"><a class="header-anchor" href="#web端密�登录"><span>web端密�登录</span></a></h2><h3 id="获�公钥-�-web端" tabindex="-1"><a class="header-anchor" href="#获�公钥-�-web端"><span>获�公钥&amp;�(web端)</span></a></h3><blockquote><p>https://passport.bilibili.com/x/passport-login/web/key</p></blockquote><p><em>请求方�:GET</em></p><p><strong>json回�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0:�功</td></tr><tr><td>message</td><td>str</td><td>错误信�</td><td></td></tr><tr><td>ttl</td><td>num</td><td>1</td><td></td></tr><tr><td>data</td><td>obj</td><td>信�本体</td><td></td></tr></tbody></table><p><code>data</code>对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>hash</td><td>str</td><td>密��值</td><td>有效时间为 20s<br>�为 16 字符<br>需�拼接在明文密�之�</td></tr><tr><td>key</td><td>str</td><td>rsa 公钥</td><td>PEM 格�编�<br>加密密�时需�使用</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#CE9178;"> &#39;https://passport.bilibili.com/x/passport-login/web/key&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;0&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;ttl&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;data&quot;</span><span style="color:#D4D4D4;">: {</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;hash&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;9333681c87fd8d6e&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;key&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;-----BEGIN PUBLIC KEY-----</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">Xl69GV6klzgxW6d2xQIDAQAB</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">-----END PUBLIC KEY-----</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">&quot;</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="登录æ“�作-web端" tabindex="-1"><a class="header-anchor" href="#登录æ“�作-web端"><span>登录æ“�作(web端)</span></a></h3><blockquote><p>https://passport.bilibili.com/x/passport-login/web/login</p></blockquote><p><em>请求方å¼�:POST</em></p><p>验è¯�登录æˆ�功å�Žä¼šè¿›è¡Œè®¾ç½®ä»¥ä¸‹ cookie 项:</p><p><code>sid</code> <code>DedeUserID</code> <code>DedeUserID__ckMd5</code> <code>SESSDATA</code> <code>bili_jct</code></p><p><strong>正文å�‚æ•° (application/x-www-form-urlencoded):</strong></p>`,21)),s("table",null,[n[21]||(n[21]=s("thead",null,[s("tr",null,[s("th",null,"å�‚æ•°å��"),s("th",null,"类型"),s("th",null,"内容"),s("th",null,"å¿…è¦�性"),s("th",null,"备注")])],-1)),s("tbody",null,[n[14]||(n[14]=s("tr",null,[s("td",null,"username"),s("td",null,"str"),s("td",null,"用户登录账å�·"),s("td",null,"å¿…è¦�"),s("td",null,"手机å�·æˆ–邮箱地å�€")],-1)),n[15]||(n[15]=s("tr",null,[s("td",null,"password"),s("td",null,"str"),s("td",null,"加密å�Žçš„带ç›�密ç �"),s("td",null,"å¿…è¦�"),s("td",null,"base64 æ ¼å¼�")],-1)),n[16]||(n[16]=s("tr",null,[s("td",null,"keep"),s("td",null,"num"),s("td",null,"0"),s("td",null,"å¿…è¦�"),s("td")],-1)),s("tr",null,[n[3]||(n[3]=s("td",null,"token",-1)),n[4]||(n[4]=s("td",null,"str",-1)),n[5]||(n[5]=s("td",null,"登录 token",-1)),n[6]||(n[6]=s("td",null,"å¿…è¦�",-1)),s("td",null,[n[1]||(n[1]=a("在")),e(l,{to:"/docs/login/login_action/#%E7%94%B3%E8%AF%B7captcha%E9%AA%8C%E8%AF%81%E7%A0%81"},{default:t(()=>n[0]||(n[0]=[a("申请 captcha 验è¯�ç �")])),_:1,__:[0]}),n[2]||(n[2]=a("接å�£å¤„获å�–"))])]),s("tr",null,[n[10]||(n[10]=s("td",null,"challenge",-1)),n[11]||(n[11]=s("td",null,"str",-1)),n[12]||(n[12]=s("td",null,"æž�验 challenge",-1)),n[13]||(n[13]=s("td",null,"å¿…è¦�",-1)),s("td",null,[n[8]||(n[8]=a("在")),e(l,{to:"/docs/login/login_action/#%E7%94%B3%E8%AF%B7captcha%E9%AA%8C%E8%AF%81%E7%A0%81"},{default:t(()=>n[7]||(n[7]=[a("申请 captcha 验è¯�ç �")])),_:1,__:[7]}),n[9]||(n[9]=a("接å�£å¤„获å�–"))])]),n[17]||(n[17]=s("tr",null,[s("td",null,"validate"),s("td",null,"str"),s("td",null,"æž�验 result"),s("td",null,"å¿…è¦�"),s("td",null,"æž�验验è¯�å�Žå¾—到")],-1)),n[18]||(n[18]=s("tr",null,[s("td",null,"seccode"),s("td",null,"str"),s("td",null,[a("æž�验 result +"),s("code",null,"|jordan")]),s("td",null,"å¿…è¦�"),s("td",null,"æž�验验è¯�å�Žå¾—到")],-1)),n[19]||(n[19]=s("tr",null,[s("td",null,"go_url"),s("td",null,"str"),s("td",null,"跳转 url"),s("td",null,"é�žå¿…è¦�"),s("td",null,"默认为 https://www.bilibili.com")],-1)),n[20]||(n[20]=s("tr",null,[s("td",null,"source"),s("td",null,"str"),s("td",null,"登录æ�¥æº�"),s("td",null,"é�žå¿…è¦�"),s("td",null,[s("code",null,"main_web"),a(":独立登录页"),s("br"),s("code",null,"main_mini"),a(":å°�窗登录")])],-1))])]),n[44]||(n[44]=o(`<p><strong>json回å¤�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0:æˆ�功<br>-105:验è¯�ç �错误<br>-400:请求错误<br>-629:账å�·æˆ–密ç �错误<br>-653:用户å��或密ç �ä¸�能为空<br>-662:æ��交超时,请é‡�æ–°æ��交<br>-2001:缺少必è¦�的的å�‚æ•°<br>-2100:需验è¯�手机å�·æˆ–邮箱<br>2400:登录秘钥错误<br>2406:验è¯�æž�验æœ�务出错<br>86000:RSA解密失败</td></tr><tr><td>message</td><td>str</td><td>错误信æ�¯</td><td></td></tr><tr><td>data</td><td>æˆ�功时:obj<br>失败时:null</td><td>æ•°æ�®æœ¬ä½“</td><td></td></tr></tbody></table><p>data 对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备æ³
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;username=12345678900&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;password=xxx&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;keep=0&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;source=main_web&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;token=aabbccdd&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;challenge=2333&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;validate=666666&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;seccode=666666|jordan&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;0&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;ttl&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;data&quot;</span><span style="color:#D4D4D4;">: {</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;status&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;url&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;https://passport.biligame.com/crossDomain?DedeUserID=***&amp;DedeUserID__ckMd5=***&amp;Expires=***&amp;SESSDATA=***&amp;bili_jct=***&amp;gourl=https%3A%2F%2Fwww.bilibili.com%2F&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;refresh_token&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;***&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;timestamp&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1662452570273</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><p><strong>�应头部抓包信�:</strong></p><p>�明显看�设置了几个 cookie</p><details><summary>查看�应示例:</summary><div class="language-http line-numbers-mode" data-highlighter="shiki" data-ext="http" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-http"><span class="line"><span style="color:#569CD6;">HTTP</span><span style="color:#D4D4D4;">/</span><span style="color:#B5CEA8;">1.1</span><span style="color:#B5CEA8;"> 200</span><span style="color:#CE9178;"> OK</span></span>
<span class="line"><span style="color:#569CD6;">Date:</span><span style="color:#CE9178;"> Mon, 13 Jul 2020 06:56:00 GMT</span></span>
<span class="line"><span style="color:#569CD6;">Content-Type:</span><span style="color:#CE9178;"> application/json;charset=UTF-8</span></span>
<span class="line"><span style="color:#569CD6;">Content-Length:</span><span style="color:#CE9178;"> 273</span></span>
<span class="line"><span style="color:#569CD6;">Connection:</span><span style="color:#CE9178;"> keep-alive</span></span>
<span class="line"><span style="color:#569CD6;">Server:</span><span style="color:#CE9178;"> Apache-Coyote/1.1</span></span>
<span class="line"><span style="color:#569CD6;">Set-Cookie:</span><span style="color:#CE9178;"> DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/</span></span>
<span class="line"><span style="color:#569CD6;">Set-Cookie:</span><span style="color:#CE9178;"> DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/</span></span>
<span class="line"><span style="color:#569CD6;">Set-Cookie:</span><span style="color:#CE9178;"> SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/; HttpOnly</span></span>
<span class="line"><span style="color:#569CD6;">Set-Cookie:</span><span style="color:#CE9178;"> bili_jct=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/</span></span>
<span class="line"><span style="color:#569CD6;">Content-Security-Policy-Report-Only:</span><span style="color:#CE9178;"> default-src &#39;self&#39; data: *.bilibili.com *.hdslb.com; style-src &#39;self&#39; &#39;unsafe-inline&#39; *.hdslb.com static.geetest.com; img-src &#39;self&#39; data: blob: *.bilibili.com *.hdslb.com http://*.hdslb.com static.geetest.com; script-src &#39;self&#39; &#39;unsafe-inline&#39; &#39;unsafe-eval&#39; *.bilibili.com *.hdslb.com api.geetest.com static.geetest.com; object-src &#39;self&#39; *.hdslb.com; media-src &#39;self&#39; *.acgvideo.com http://*.acgvideo.com *.ksyungslb.com; connect-src &#39;self&#39; data: wss://*.bilibili.com:* *.bilibili.com *.hdslb.com *.biliapi.net *.biliapi.com; frame-ancestors &#39;self&#39; *.bilibili.com *.biligame.com; report-uri https://security.bilibili.com/csp_report</span></span>
<span class="line"><span style="color:#569CD6;">Expires:</span><span style="color:#CE9178;"> Mon, 13 Jul 2020 06:55:59 GMT</span></span>
<span class="line"><span style="color:#569CD6;">Cache-Control:</span><span style="color:#CE9178;"> no-cache</span></span>
<span class="line"><span style="color:#569CD6;">X-Cache-Webcdn:</span><span style="color:#CE9178;"> BYPASS from jd-sxhz-dx-w-01</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h2 id="web端密�登录-旧版" tabindex="-1"><a class="header-anchor" href="#web端密�登录-旧版"><span>web端密�登录-旧版</span></a></h2><p>以下为密�扫�登录 API,尚�正常访问</p><h3 id="获�公钥-�-web端-旧版" tabindex="-1"><a class="header-anchor" href="#获�公钥-�-web端-旧版"><span>获�公钥&amp;�(web端-旧版)</span></a></h3><blockquote><p>https://passport.bilibili.com/login?act=getkey</p></blockquote><p><em>请求方�:GET</em></p><p><strong>json回�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>hash</td><td>str</td><td>密��值</td><td>有效时间为 20s<br>�为 16 字符<br>需�拼接在明文密�之�</td></tr><tr><td>key</td><td>str</td><td>rsa 公钥</td><td>PEM 格�编�<br>加密密�时需�使用</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#CE9178;"> &#39;https://passport.bilibili.com/login?act=getkey&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;hash&quot;</span><span style="color:#D4D4D4;">:</span><span style="color:#CE9178;">&quot;07c6501690c1af85&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;key&quot;</span><span style="color:#D4D4D4;">:</span><span style="color:#CE9178;">&quot;-----BEGIN PUBLIC KEY-----</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">Xl69GV6klzgxW6d2xQIDAQAB</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">-----END PUBLIC KEY-----</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">&quot;</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="登录�作-web端-旧版" tabindex="-1"><a class="header-anchor" href="#登录�作-web端-旧版"><span>登录�作(web端-旧版)</span></a></h3><blockquote><p>https://passport.bilibili.com/web/login/v2</p></blockquote><p><em>请求方�:POST</em></p><p>验�登录�功�会进行设置以下cookie项:</p><p><code>sid</code> <code>DedeUserID</code> <code>DedeUserID__ckMd5</code> <code>SESSDATA</code> <code>bili_jct</code></p><p><strong>正文�数 (application/x-www-form-urlencoded):</strong></p>`,29)),s("table",null,[n[42]||(n[42]=s("thead",null,[s("tr",null,[s("th",null,"�数�"),s("th",null,"类型"),s("th",null,"内容"),s("th",null,"必�性"),s("th",null,"备注")])],-1)),s("tbody",null,[n[36]||(n[36]=s("tr",null,[s("td",null,"captchaType"),s("td",null,"num"),s("td",null,"6"),s("td",null,"必�"),s("td",null,[a("必须为"),s("code",null,"6")])],-1)),n[37]||(n[37]=s("tr",null,[s("td",null,"username"),s("td",null,"str"),s("td",null,"用户登录账�"),s("td",null,"必�"),s("td",null,"手机�或邮箱地�")],-1)),n[38]||(n[38]=s("tr",null,[s("td",null,"password"),s("td",null,"str"),s("td",null,"加密�的带�密�"),s("td",null,"必�"),s("td",null,"base64 格�")],-1)),n[39]||(n[39]=s("tr",null,[s("td",null,"keep"),s("td",null,"bool"),s("td",null,"是�记�登录"),s("td",null,"必�"),s("td",null,[s("code",null,"true"),a(":记�登录"),s("br"),s("code",null,"false"),a(":�记�登录")])],-1)),s("tr",null,[n[25]||(n[25]=s("td",null,"key",-1)),n[26]||(n[26]=s("td",null,"str",-1)),n[27]||(n[27]=s("td",null,"登录 token",-1)),n[28]||(n[28]=s("td",null,"必�",-1)),s("td",null,[n[23]||(n[23]=a("在")),e(l,{to:"/docs/login/login_action/#%E7%94%B3%E8%AF%B7captcha%E9%AA%8C%E8%AF%81%E7%A0%81"},{default:t(()=>n[22]||(n[22]=[a("申请 captcha 验��")])),_:1,__:[22]}),n[24]||(n[24]=a("接�处获�"))])]),s("tr",null,[n[32]||(n[32]=s("td",null,"challenge",-1)),n[33]||(n[33]=s("td",null,"str",-1)),n[34]||(n[34]=s("td",null,"�验 challenge",-1)),n[35]||(n[35]=s("td",null,"必�",-1)),s("td",null,[n[30]||(n[30]=a("在")),e(l,{to:"/docs/login/login_action/#%E7%94%B3%E8%AF%B7captcha%E9%AA%8C%E8%AF%81%E7%A0%81"},{default:t(()=>n[29]||(n[29]=[a("申请 captcha 验��")])),_:1,__:[29]}),n[31]||(n[31]=a("接�处获�"))])]),n[40]||(n[40]=s("tr",null,[s("td",null,"validate"),s("td",null,"str"),s("td",null,"�验 result"),s("td",null,"必�"),s("td",null,"�验验��得到")],-1)),n[41]||(n[41]=s("tr",null,[s("td",null,"seccode"),s("td",null,"str"),s("td",null,[a("�验 result +"),s("code",null,"|jordan")]),s("td",null,"必�"),s("td",null,"�验验��得到")],-1))])]),n[45]||(n[45]=o(`<p><strong>json回�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0:�功<br>-400:请求错误<br>-629:账�或密�错误<br>-653:用户�或密��能为空<br>-662:�交超时,请�新�交<br>-2001:缺少必�的的�数<br>-2100:需验�手机�或邮箱<br>2400:登录秘钥错误<br>2406:验��验�务出错<br>86000:RSA解密失败</td></tr><tr><td>ts</td><td>num</td><td>当�时间戳</td><td>�功时无此项</td></tr><tr><td>message</td><td>str</td><td>错误信�</td><td>默认为0</td></tr><tr><td>data</td><td>obj</td><td>数�本体</td><td>�功时有此项</td></tr></tbody></table><p><code>data</code>对象:</p><p><strong>未登录时:</strong></p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>redirectUrl</td><td>str</td><td>游�分站跨域登录 url</td><td></td></tr></tbody></table><p><strong>已登录时:
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;captchaType=6&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;username=12345678900&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;password=xxx&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;keep=true&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;token=aabbccdd&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;challenge=2333&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;validate=666666&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;seccode=666666|jordan&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;data&quot;</span><span style="color:#D4D4D4;">: {</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;redirectUrl&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;https://passport.biligame.com/crossDomain?DedeUserID=***&amp;DedeUserID__ckMd5=***&amp;Expires=15551000&amp;SESSDATA=***&amp;bili_jct=***&amp;gourl=https%3A%2F%2Fwww.bilibili.com&quot;</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><p><strong>�应头部抓包信�:</strong></p><p>�明显看�设置了几个 cookie</p><details><summary>查看�应示例:</summary><div class="language-http line-numbers-mode" data-highlighter="shiki" data-ext="http" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-http"><span class="line"><span style="color:#569CD6;">HTTP</span><span style="color:#D4D4D4;">/</span><span style="color:#B5CEA8;">1.1</span><span style="color:#B5CEA8;"> 200</span><span style="color:#CE9178;"> OK</span></span>
<span class="line"><span style="color:#569CD6;">Date:</span><span style="color:#CE9178;"> Mon, 13 Jul 2020 06:56:00 GMT</span></span>
<span class="line"><span style="color:#569CD6;">Content-Type:</span><span style="color:#CE9178;"> application/json;charset=UTF-8</span></span>
<span class="line"><span style="color:#569CD6;">Content-Length:</span><span style="color:#CE9178;"> 273</span></span>
<span class="line"><span style="color:#569CD6;">Connection:</span><span style="color:#CE9178;"> keep-alive</span></span>
<span class="line"><span style="color:#569CD6;">Server:</span><span style="color:#CE9178;"> Apache-Coyote/1.1</span></span>
<span class="line"><span style="color:#569CD6;">Set-Cookie:</span><span style="color:#CE9178;"> DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/</span></span>
<span class="line"><span style="color:#569CD6;">Set-Cookie:</span><span style="color:#CE9178;"> DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/</span></span>
<span class="line"><span style="color:#569CD6;">Set-Cookie:</span><span style="color:#CE9178;"> SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/; HttpOnly</span></span>
<span class="line"><span style="color:#569CD6;">Set-Cookie:</span><span style="color:#CE9178;"> bili_jct=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/</span></span>
<span class="line"><span style="color:#569CD6;">Content-Security-Policy-Report-Only:</span><span style="color:#CE9178;"> default-src &#39;self&#39; data: *.bilibili.com *.hdslb.com; style-src &#39;self&#39; &#39;unsafe-inline&#39; *.hdslb.com static.geetest.com; img-src &#39;self&#39; data: blob: *.bilibili.com *.hdslb.com http://*.hdslb.com static.geetest.com; script-src &#39;self&#39; &#39;unsafe-inline&#39; &#39;unsafe-eval&#39; *.bilibili.com *.hdslb.com api.geetest.com static.geetest.com; object-src &#39;self&#39; *.hdslb.com; media-src &#39;self&#39; *.acgvideo.com http://*.acgvideo.com *.ksyungslb.com; connect-src &#39;self&#39; data: wss://*.bilibili.com:* *.bilibili.com *.hdslb.com *.biliapi.net *.biliapi.com; frame-ancestors &#39;self&#39; *.bilibili.com *.biligame.com; report-uri https://security.bilibili.com/csp_report</span></span>
<span class="line"><span style="color:#569CD6;">Expires:</span><span style="color:#CE9178;"> Mon, 13 Jul 2020 06:55:59 GMT</span></span>
<span class="line"><span style="color:#569CD6;">Cache-Control:</span><span style="color:#CE9178;"> no-cache</span></span>
<span class="line"><span style="color:#569CD6;">X-Cache-Webcdn:</span><span style="color:#CE9178;"> BYPASS from jd-sxhz-dx-w-01</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h2 id="app端密�登录" tabindex="-1"><a class="header-anchor" href="#app端密�登录"><span>APP端密�登录</span></a></h2><h3 id="获�公钥-�-app端" tabindex="-1"><a class="header-anchor" href="#获�公钥-�-app端"><span>获�公钥&amp;�(APP端)</span></a></h3><blockquote><p>http://passport.bilibili.com/api/oauth2/getKey</p></blockquote><p><em>请求方�:POST</em></p><p>鉴�方�:appkey</p><p><strong>正文�数( application/x-www-form-urlencoded ):</strong></p><table><thead><tr><th>�数�</th><th>类型</th><th>内容</th><th>必�性</th><th>备注</th></tr></thead><tbody><tr><td>appkey</td><td>str</td><td>APP密钥</td><td>APP方�必�</td><td></td></tr><tr><td>sign</td><td>str</td><td>APP签�</td><td>APP方�必�</td><td></td></tr></tbody></table><p><strong>json回�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>hash</td><td>str</td><td>密��值</td><td>有效时间为 20s<br>�为 16 字符<br>需�拼接在明文密�之�</td></tr><tr><td>key</td><td>str</td><td>rsa 公钥</td><td>PEM 格�编�<br>加密密�时需�使用</td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#CE9178;"> &#39;https://passport.bilibili.com/api/oauth2/getKey&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;appkey=1d8b6e7d45233436&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;sign=17004c193f688f0b5665c1068e733aff&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;hash&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;07c6501690c1af85&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;key&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;-----BEGIN PUBLIC KEY-----</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">Xl69GV6klzgxW6d2xQIDAQAB</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">-----END PUBLIC KEY-----</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">&quot;</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="登录�作-app端" tabindex="-1"><a class="header-anchor" href="#登录�作-app端"><span>登录�作(APP端)</span></a></h3><p>TODO</p><h2 id="登录密�的加密实例" tabindex="-1"><a class="header-anchor" href="#登录密�的加密实例"><span>登录密�的加密实例</span></a></h2><p>以下实例使用 Python 语言,在任何平�(web�APP)使用密�登录都需�如下加密步骤</p><p>首先在需拉� RSA PubKey 和 salt 备用</p><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-python"><span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> requests</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4;">resp = requests.get(</span><span style="color:#CE9178;">&#39;https://passport.bilibili.com/x/passport-login/web/key&#39;</span><span style="color:#D4D4D4;">).json()[</span><span style="color:#CE9178;">&#39;data&#39;</span><span style="color:#D4D4D4;">]</span></span>
<span class="line"><span style="color:#DCDCAA;">print</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">&#39;salt =&#39;</span><span style="color:#D4D4D4;">, resp[</span><span style="color:#CE9178;">&#39;hash&#39;</span><span style="color:#D4D4D4;">])</span></span>
<span class="line"><span style="color:#DCDCAA;">print</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">&#39;PubKey =&#39;</span><span style="color:#D4D4D4;">, resp[</span><span style="color:#CE9178;">&#39;key&#39;</span><span style="color:#D4D4D4;">])</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>hash</code>字段为 salt,长度固定为 16 字符,timeout 时间�有 20s</p><p><code>key</code>字段为 RSA PubKey,为 PEM 格�,加密需�使用</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-"><span class="line"><span>salt = 9773d106a67e27d6</span></span>
<span class="line"><span>PubKey = -----BEGIN PUBLIC KEY-----</span></span>
<span class="line"><span>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n</span></span>
<span class="line"><span>6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx</span></span>
<span class="line"><span>/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+</span></span>
<span class="line"><span>Xl69GV6klzgxW6d2xQIDAQAB</span></span>
<span class="line"><span>-----END PUBLIC KEY-----</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>例如登录密�为<code>BiShi22332323</code>,现在对它进行加�并使用获�的 PubKey 加密</p><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-python"><span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> rsa</span></span>
<span class="line"><span style="color:#D4D4D4;">password = </span><span style="color:#CE9178;">&#39;BiShi22332323&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4;">pubKey = rsa.PublicKey.load_pkcs1_openssl_pem(resp[</span><span style="color:#CE9178;">&#39;key&#39;</span><span style="color:#D4D4D4;">]) </span><span style="color:#6A9955;"># 读� PEM 密钥</span></span>
<span class="line"><span style="color:#D4D4D4;">encryptedPassword = rsa.encrypt((resp[</span><span style="color:#CE9178;">&#39;hash&#39;</span><span style="color:#D4D4D4;">]+password).encode(), pubKey) </span><span style="color:#6A9955;"># �需�加在明文密�之�,一并加密</span></span>
<span class="line"><span style="color:#DCDCAA;">print</span><span style="color:#D4D4D4;">(encryptedPassword)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>下�将输出一段 bytes 数�:</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-"><span class="line"><span>b&#39;}\\x9c\\xd4\\xcd\\x88\\x92\\xa7\\xde\\x85\\xdb\\xabm\\xd7\\xd3\\x08\\x02@xo\\x85\\xa4\\xe1\\x11\\xd0o\\x80\\x03.$\\xc8l\\xbe\\xba;\\xfe\\xee\\xa7(\\xf8S\\x95\\x1e\\x9106\\xa4\\x1d\\xcf\\x8e\\xbe\\x8d\\x94A\\x86s\\xf9&quot;\\x12\\x0c\\x135\\xbb\\xbc\\xe1\\xde\\x1b\\x90\\t)P\\xeb\\xa9\\x8fXY]\\x83\\x18\\x81f\\n:\\xdb\\xe1\\xbe\\xe8\\x1e\\xba\\x1c D8d}B\\x17\\xf9\\x8a\\xf0i\\&#39;1\\xa5\\xc4\\x05&amp;\\xaa;n\\xf8{\\xa02\\xffY\\xcelU\\xd5\\xaf\\x8aJK\\xdc\\xf1@\\xbc\\x93&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>接下�需�把加密�的结果进行 base64 编�</p><div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-python"><span class="line"><span style="color:#C586C0;">import</span><span style="color:#D4D4D4;"> base64</span></span>
<span class="line"><span style="color:#D4D4D4;">b64Password = base64.b64encode(encryptedPassword).decode()</span></span>
<span class="line"><span style="color:#DCDCAA;">print</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">&#39;result =&#39;</span><span style="color:#D4D4D4;">, b64Password)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>以下为最终加密结果,�直接� API 请求体传�以登录:</p><p>因为 RSA 公钥加密的<strong>无法解密性</strong>,故无法本地验�,仅�请求 API 验�(略...</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-"><span class="line"><span>result = fZzUzYiSp96F26tt19MIAkB4b4Wk4RHQb4ADLiTIbL66O/7upyj4U5UekTA2pB3Pjr6NlEGGc/kiEgwTNbu84d4bkAkpUOupj1hZXYMYgWYKOtvhvugeuhwgRDhkfUIX+YrwaScxpcQFJqo7bvh7oDL/Wc5sVdWvikpL3PFAvJM=</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>以下为密�加密的Java实现:</p><div class="language-java line-numbers-mode" data-highlighter="shiki" data-ext="java" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-java"><span class="line"><span style="color:#569CD6;">package</span><span style="color:#D4D4D4;"> com.ho.test;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6;">import</span><span style="color:#D4D4D4;"> cn.hutool.core.codec.Base64;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6;">import</span><span style="color:#D4D4D4;"> javax.crypto.Cipher;</span></span>
<span class="line"><span style="color:#569CD6;">import</span><span style="color:#D4D4D4;"> java.security.KeyFactory;</span></span>
<span class="line"><span style="color:#569CD6;">import</span><span style="color:#D4D4D4;"> java.security.PublicKey;</span></span>
<span class="line"><span style="color:#569CD6;">import</span><span style="color:#D4D4D4;"> java.security.spec.X509EncodedKeySpec;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6;">public</span><span style="color:#569CD6;"> class</span><span style="color:#4EC9B0;"> Test3</span><span style="color:#D4D4D4;"> {</span></span>
<span class="line"><span style="color:#569CD6;"> public</span><span style="color:#569CD6;"> static</span><span style="color:#4EC9B0;"> void</span><span style="color:#DCDCAA;"> main</span><span style="color:#D4D4D4;">(</span><span style="color:#4EC9B0;">String</span><span style="color:#D4D4D4;">[] </span><span style="color:#9CDCFE;">args</span><span style="color:#D4D4D4;">) </span><span style="color:#569CD6;">throws</span><span style="color:#4EC9B0;"> Exception</span><span style="color:#D4D4D4;"> {</span></span>
<span class="line"><span style="color:#6A9955;"> //用户密�</span></span>
<span class="line"><span style="color:#4EC9B0;"> String</span><span style="color:#9CDCFE;"> password</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">&quot;abcdef&quot;</span><span style="color:#D4D4D4;">;</span></span>
<span class="line"><span style="color:#6A9955;"> //获�到的�书内容</span></span>
<span class="line"><span style="color:#4EC9B0;"> String</span><span style="color:#9CDCFE;"> key</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">&quot;-----BEGIN PUBLIC KEY-----</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">Xl69GV6klzgxW6d2xQIDAQAB</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">-----END PUBLIC KEY-----</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">&quot;</span><span style="color:#D4D4D4;">;</span></span>
<span class="line"><span style="color:#6A9955;"> //获�到的�值</span></span>
<span class="line"><span style="color:#4EC9B0;"> String</span><span style="color:#9CDCFE;"> hash</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">&quot;bb73382121594c46&quot;</span><span style="color:#D4D4D4;">;</span></span>
<span class="line"><span style="color:#4EC9B0;"> String</span><span style="color:#D4D4D4;">[] </span><span style="color:#9CDCFE;">split</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">key</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">strip</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">split</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">&quot;</span><span style="color:#D7BA7D;">\\n</span><span style="color:#CE9178;">&quot;</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#4EC9B0;"> String</span><span style="color:#9CDCFE;"> newKey</span><span style="color:#D4D4D4;"> = split[</span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">] + split[</span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">] + split[</span><span style="color:#B5CEA8;">3</span><span style="color:#D4D4D4;">] + split[</span><span style="color:#B5CEA8;">4</span><span style="color:#D4D4D4;">];</span></span>
<span class="line"><span style="color:#6A9955;"> //进行加密</span></span>
<span class="line"><span style="color:#4EC9B0;"> KeyFactory</span><span style="color:#9CDCFE;"> keyFactory</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">KeyFactory</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">getInstance</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">&quot;RSA&quot;</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#4EC9B0;"> X509EncodedKeySpec</span><span style="color:#9CDCFE;"> keySpec</span><span style="color:#D4D4D4;"> = </span><span style="color:#C586C0;">new</span><span style="color:#DCDCAA;"> X509EncodedKeySpec</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">Base64</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">decode</span><span style="color:#D4D4D4;">(newKey));</span></span>
<span class="line"><span style="color:#4EC9B0;"> PublicKey</span><span style="color:#9CDCFE;"> publicKey</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">keyFactory</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">generatePublic</span><span style="color:#D4D4D4;">(keySpec);</span></span>
<span class="line"><span style="color:#4EC9B0;"> Cipher</span><span style="color:#9CDCFE;"> cipher</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">Cipher</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">getInstance</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">keyFactory</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">getAlgorithm</span><span style="color:#D4D4D4;">());</span></span>
<span class="line"><span style="color:#9CDCFE;"> cipher</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">init</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">Cipher</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">PUBLIC_KEY</span><span style="color:#D4D4D4;">, publicKey);</span></span>
<span class="line"><span style="color:#4EC9B0;"> byte</span><span style="color:#D4D4D4;">[] </span><span style="color:#9CDCFE;">bytes</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">cipher</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">doFinal</span><span style="color:#D4D4D4;">((hash + password).</span><span style="color:#DCDCAA;">getBytes</span><span style="color:#D4D4D4;">());</span></span>
<span class="line"><span style="color:#4EC9B0;"> String</span><span style="color:#9CDCFE;"> encode</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">Base64</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">encode</span><span style="color:#D4D4D4;">(bytes);</span></span>
<span class="line"><span style="color:#9CDCFE;"> System</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">out</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">println</span><span style="color:#D4D4D4;">(encode);</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="手机�验�" tabindex="-1"><a class="header-anchor" href="#手机�验�"><span>手机�验�</span></a></h2><h3 id="简述" tabindex="-1"><a class="header-anchor" href="#简述"><span>简述</span></a></h3><p>有时使用密�登录时, 无论使用网页端还是手机端接�, 由于 请求头缺失/请求频率高/请求IP 等原因, 会返回如下内容, 此时需�进行手机�验�或绑定</p><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;0&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;ttl&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;data&quot;</span><span style="color:#D4D4D4;">: {</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;is_new&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#569CD6;">false</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;status&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">2</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;本次登录环境存在风险, 需使用手机�进行验�或绑定&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;url&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;https://passport.bilibili.com/h5-app/passport/risk/verify?tmp_token=imtmptk&amp;request_id=imreqid&amp;source=risk&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;refresh_token&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;timestamp&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;hint&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;in_reg_audit&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="获�-captcha" tabindex="-1"><a class="header-anchor" href="#获�-captcha"><span>获� captcha</span></a></h3><blockquote><p>https://passport.bilibili.com/x/safecenter/captcha/pre</p></blockquote><p><em>请求方法: POST</em></p><p><strong>正文�数 (application/x-www-form-urlencoded):</strong></p><table><thead><tr><th>�数�</th><th>类型</th><th>内容</th><th>必�性</th><th>备注</th></tr></thead><tbody><tr><td>source</td><td>str</td><td>risk</td><td>�必�</td><td></td></tr></tbody></table><p><strong>JSON 回�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0: �功</td></tr><tr><td>message</td><td>str</td><td>错误信�</td><td>默认为 0</td></tr><tr><td>ttl</td><td>num</td><td>1</td><td></td></tr><tr><td>data</td><td>obj</td><td>数�本体</td><td></td></tr></tbody></table><p><code>data</code> 对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>recaptcha_type</td><td>str</td><td>验��类型</td><td>目�仅 <code>geetest</code></td></tr><tr><td>recaptcha_token</td><td>str</td><td>验�� token</td><td></td></tr><tr><td>gee_challenge</td><td>str</td><td>�验 challenge</td><td></td></tr><tr><td>gee_gt</td><td>str</td><td>�验 gt</td><td></td></tr></tbody></table><p><strong>示例:</strong></p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#569CD6;"> -X</span><span style="color:#CE9178;"> POST</span><span style="color:#CE9178;"> &#39;https://passport.bilibili.com/x/safecenter/captcha/pre&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;0&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;ttl&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;data&quot;</span><span style="color:#D4D4D4;">: {</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;recaptcha_type&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;geetest&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;recaptcha_token&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;8a418aa9eebe411599d759fc318d55e1&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;gee_challenge&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;4e5353e7ab9f9aef0c97fa5a5b1ad101&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;gee_gt&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;ac597a4506fee079629df5d8b66dd4fe&quot;</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="��验��" tabindex="-1"><a class="header-anchor" href="#��验��"><span>��验��</span></a></h3><blockquote><p>https://passport.bilibili.com/x/safecenter/common/sms/send</p></blockquote><p><em>请求方法: POST</em></p><p><strong>正文�数 (application/x-www-form-urlencoded):</strong></p><table><thead><tr><th>�数�</th><th>类型</th><th>内容</th><th>必�性</th><th>备注</th></tr></thead><tbody><tr><td>tmp_code</td><td>str</td><td>url query 中的 tmp_code</td><td>必�</td><td>�� <a href="#%E7%AE%80%E8%BF%B0">简述</a> 中 JSON 示例中的 <code>url</code></td></tr><tr><td>sms_type</td><td>str</td><td><code>loginTelCheck</code></td><td>必�</td><td></td></tr><tr><td>recaptcha_token</td><td>str</td><td>验�� token</td><td>必�</td><td>�� <a href="#%E8%8E%B7%E5%8F%96-captcha">获� captcha</a></td></tr><tr><td>gee_challenge</td><td>str</td><td>�验 challenge</td><td>必�</td><td>�� <a href="#%E8%8E%B7%E5%8F%96-captcha">获� captcha</a></td></tr><tr><td>gee_validate</td><td>str</td><td>�验 validate</td><td>必�</td><td>验��获得</td></tr><tr><td>gee_seccode</td><td>str</td><td>�验 seccode</td><td>必�</td><td>验��获得</td></tr></tbody></table><p><strong>JSON回�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0: �功</td></tr><tr><td>message</td><td>str</td><td>错误信�</td><td>默认为 0</td></tr><tr><td>ttl</td><td>num</td><td>1</td><td></td></tr><tr><td>data</td><td>obj</td><td>数�本体</td><td></td></tr></tbody></table><p><code>data</code> 对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>captcha_key</td><td>str</td><td>验�� key</td><td></td></tr></tbody></table><p><strong>示例:</strong></p><p>�设 <code>tmp_code</code> 为 <code>imtmptk</code>, <code>recaptcha_token</code> 为 <code>kfc</code>, <code>gee_challenge</code> 为 <code>crazythursday</code>, <code>gee_validate</code> 为 <code>vivo50</code>, <code>gee_seccode</code> 为 <code>vivo50|jordan</code></p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#569CD6;"> -X</span><span style="color:#CE9178;"> POST</span><span style="color:#CE9178;"> &#39;https://passport.bilibili.com/x/safecenter/common/sms/send&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;tmp_code=imtmptk&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;sms_type=loginTelCheck&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;recaptcha_token=kfc&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;gee_challenge=crazythursday&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;gee_validate=vivo50&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;gee_seccode=vivo50|jordan&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;0&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;ttl&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;data&quot;</span><span style="color:#D4D4D4;">: {</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;captcha_key&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;42403fb08ed2cd97afff14edefbae482&quot;</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="验�手机验��" tabindex="-1"><a class="header-anchor" href="#验�手机验��"><span>验�手机验��</span></a></h3><blockquote><p>https://passport.bilibili.com/x/safecenter/login/tel/verify</p></blockquote><p><em>请求方法: POST</em></p><p><strong>正文�数 (application/x-www-form-urlencoded):</strong></p><table><thead><tr><th>�数�</th><th>类型</th><th>内容</th><th>必�性</th><th>备注</th></tr></thead><tbody><tr><td>tmp_code</td><td>str</td><td>url query 中的 tmp_code</td><td>必�</td><td>�� <a href="#%E7%AE%80%E8%BF%B0">简述</a> 中 JSON 示例中的 <code>url</code></td></tr><tr><td>captcha_key</td><td>str</td><td>验�� key</td><td>必�</td><td>�� <a href="#%E5%8F%91%E9%80%81%E9%AA%8C%E8%AF%81%E7%A0%81">��验��</a></td></tr><tr><td>type</td><td>str</td><td><code>loginTelCheck</code></td><td>必�</td><td></td></tr><tr><td>code</td><td>num</td><td>接收到的验��</td><td>必�</td><td></td></tr><tr><td>request_id</td><td>str</td><td>url query 中的 request_id</td><td>必�</td><td>�� <a href="#%E7%AE%80%E8%BF%B0">简述</a> 中 JSON 示例中的 <code>url</code></td></tr><tr><td>source</td><td>str</td><td>risk</td><td>必�</td><td></td></tr></tbody></table><p><strong>JSON回�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0: �功</td></tr><tr><td>message</td><td>str</td><td>错误信�</td><td>默认为 0</td></tr><tr><td>ttl</td><td>num</td><td>1</td><td></td></tr><tr><td>data</td><td>obj</td><td>数�本体</td><td></td></tr></tbody></table><p><code>data</code> 对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>str</td><td>交�代�</td><td>用于�� <a href="#%E4%BA%A4%E6%8D%A2-cookie">交� Cookie</a></td></tr></tbody></table><p><strong>示例:</strong></p><p>�设 <code>tmp_code</code> 为 <code>imtmptk</code>, <code>captcha_key</code> 为 <code>42403fb08ed2cd97afff14edefbae482</code>, <code>code</code> 为 <code>114514</code>, <code>request_id</code> 为 <code>imreqid</code></p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#569CD6;"> -X</span><span style="color:#CE9178;"> POST</span><span style="color:#CE9178;"> &#39;https://passport.bilibili.com/x/safecenter/login/tel/verify&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;tmp_code=imtmptk&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;captcha_key=42403fb08ed2cd97afff14edefbae482&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;type=loginTelCheck&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;code=114514&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode</span><span style="color:#CE9178;">&#39;request_id=imreqid&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode</span><span style="color:#CE9178;">&#39;source=risk&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;0&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;ttl&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;data&quot;</span><span style="color:#D4D4D4;">: {</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;6eadf783c55a387b143773282b217682&quot;</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="交�-cookie" tabindex="-1"><a class="header-anchor" href="#交�-cookie"><span>交� Cookie</span></a></h3><blockquote><p>https://passport.bilibili.com/x/passport-login/web/exchange_cookie</p></blockquote><p><em>请求方法: POST</em></p><p><strong>正文�数 (application/x-www-form-urlencoded):</strong></p><table><thead><tr><th>�数�</th><th>类型</th><th>内容</th><th>必�性</th><th>备注</th></tr></thead><tbody><tr><td>source</td><td>str</td><td>risk</td><td>必�</td><td></td></tr><tr><td>code</td><td>str</td><td>交�代�</td><td>必�</td><td>�� <a href="#%E9%AA%8C%E8%AF%81%E6%89%8B%E6%9C%BA%E9%AA%8C%E8%AF%81%E7%A0%81">验�手机验��</a></td></tr></tbody></table><p><strong>JSON回�:</strong></p><p>根对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>code</td><td>num</td><td>返回值</td><td>0: �功</td></tr><tr><td>message</td><td>str</td><td>错误信�</td><td>默认为 0</td></tr><tr><td>ttl</td><td>num</td><td>1</td><td></td></tr><tr><td>data</td><td>obj</td><td>数�本体</td><td></td></tr></tbody></table><p><code>data</code> 对象:</p><table><thead><tr><th>字段</th><th>类型</th><th>内容</th><th>备注</th></tr></thead><tbody><tr><td>url</td><td>str</td><td>游�分站跨域登录 url</td><td></td></tr><tr><td>refresh_token</td><td>str</td><td>刷新 token</td><td></td></tr></tbody></table><p><strong>示例:</strong></p><p>�设 <code>code</code> 为 <code>6eadf783c55a387b143773282b217682</code></p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-shell"><span class="line"><span style="color:#DCDCAA;">curl</span><span style="color:#569CD6;"> -X</span><span style="color:#CE9178;"> POST</span><span style="color:#CE9178;"> &#39;https://passport.bilibili.com/x/passport-login/web/exchange_cookie&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode </span><span style="color:#CE9178;">&#39;code=6eadf783c55a387b143773282b217682&#39;</span><span style="color:#D7BA7D;"> \\</span></span>
<span class="line"><span style="color:#D4D4D4;">--data-urlencode</span><span style="color:#CE9178;">&#39;source=risk&#39;</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><details><summary>查看�应示例:</summary><div class="language-json line-numbers-mode" data-highlighter="shiki" data-ext="json" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-json"><span class="line"><span style="color:#D4D4D4;">{</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;code&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">0</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;message&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;0&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;ttl&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#B5CEA8;">1</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;data&quot;</span><span style="color:#D4D4D4;">: {</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;url&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;https://passport.biligame.com/x/passport-login/web/crossDomain?DedeUserID=645769214&amp;DedeUserID__ckMd5=653409864bf9e200&amp;Expires=1739265009&amp;SESSDATA=11d97d2a,1739265009,928d7*82CjCKOhDRm5gROpSfgQ7B2axGVMWm5LuwNTkNDK2vjeGl7xvAsfsCINKmczXvO_Z45FsSVlJ1NHdlYlpSei1lYjdqUXRMaUpuRk9GbjVPS0psc3ZTcDFGRjhnNGhIbHRlZ0ZQRWQ1MUlUY2pnQ0lkTVRYNjlabmlUWGxHcVdkV3hrcElpa0ZEZEZRIIEC&amp;bili_jct=3cdee5b84eb48d4f08bcfd57b58cf40b&amp;gourl=https%3A%2F%2Fwww.bilibili.com%2F&amp;first_domain=.bilibili.com&quot;</span><span style="color:#D4D4D4;">,</span></span>
<span class="line"><span style="color:#9CDCFE;"> &quot;refresh_token&quot;</span><span style="color:#D4D4D4;">: </span><span style="color:#CE9178;">&quot;43de156ad241864640f9d9721656a682&quot;</span></span>
<span class="line"><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><details><summary>查看�应头部示例:</summary><div class="language-http line-numbers-mode" data-highlighter="shiki" data-ext="http" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-http"><span class="line"><span style="color:#D4D4D4;">HTTP/2 </span><span style="color:#B5CEA8;">200</span><span style="color:#CE9178;"> OK</span></span>
<span class="line"><span style="color:#569CD6;">date:</span><span style="color:#CE9178;"> Thu, 15 Aug 2024 09:10:09 GMT</span></span>
<span class="line"><span style="color:#569CD6;">content-type:</span><span style="color:#CE9178;"> application/json; charset=utf-8</span></span>
<span class="line"><span style="color:#569CD6;">access-control-allow-credentials:</span><span style="color:#CE9178;"> true</span></span>
<span class="line"><span style="color:#569CD6;">access-control-allow-methods:</span><span style="color:#CE9178;"> GET,POST,PUT,DELETE</span></span>
<span class="line"><span style="color:#569CD6;">access-control-allow-origin:</span><span style="color:#CE9178;"> https://passport.bilibili.com</span></span>
<span class="line"><span style="color:#569CD6;">bili-status-code:</span><span style="color:#CE9178;"> 0</span></span>
<span class="line"><span style="color:#569CD6;">bili-trace-id:</span><span style="color:#CE9178;"> 175262647666bdc5</span></span>
<span class="line"><span style="color:#569CD6;">set-cookie:</span><span style="color:#CE9178;"> SESSDATA=xxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT; HttpOnly; Secure</span></span>
<span class="line"><span style="color:#569CD6;">set-cookie:</span><span style="color:#CE9178;"> bili_jct=xxxxxxxxxxxxxxxxxxxxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT</span></span>
<span class="line"><span style="color:#569CD6;">set-cookie:</span><span style="color:#CE9178;"> DedeUserID=114514191; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT</span></span>
<span class="line"><span style="color:#569CD6;">set-cookie:</span><span style="color:#CE9178;"> DedeUserID__ckMd5=0123456789abcdef; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT</span></span>
<span class="line"><span style="color:#569CD6;">set-cookie:</span><span style="color:#CE9178;"> sid=xxxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT</span></span>
<span class="line"><span style="color:#569CD6;">vary:</span><span style="color:#CE9178;"> Origin</span></span>
<span class="line"><span style="color:#569CD6;">x-bili-trace-id:</span><span style="color:#CE9178;"> 60f0305e2abc511d175262647666bdc5</span></span>
<span class="line"><span style="color:#569CD6;">access-control-allow-headers:</span><span style="color:#CE9178;"> Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,Access-Control-Allow-Credentials,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Cache-Webcdn,x-bilibili-key-real-ip,x-backend-bili-real-ip,x-risk-header</span></span>
<span class="line"><span style="color:#569CD6;">cross-origin-resource-policy:</span><span style="color:#CE9178;"> cross-origin</span></span>
<span class="line"><span style="color:#569CD6;">access-control-expose-headers:</span><span style="color:#CE9178;"> X-Bili-Gaia-Vvoucher,X-Bili-Trace-Id</span></span>
<span class="line"><span style="color:#569CD6;">expires:</span><span style="color:#CE9178;"> Thu, 15 Aug 2024 09:10:08 GMT</span></span>
<span class="line"><span style="color:#569CD6;">cache-control:</span><span style="color:#CE9178;"> no-cache</span></span>
<span class="line"><span style="color:#569CD6;">x-cache-webcdn:</span><span style="color:#CE9178;"> BYPASS from blzone01</span></span>
<span class="line"><span style="color:#569CD6;">content-encoding:</span><span style="color:#CE9178;"> br</span></span>
<span class="line"><span style="color:#569CD6;">X-Firefox-Spdy:</span><span style="color:#CE9178;"> h2</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details>`,110))])}const b=p(c,[["render",D]]),m=JSON.parse('{"path":"/docs/login/login_action/password.html","title":"密�登录","lang":"zh-CN","frontmatter":{},"git":{"updatedTime":1726759053000,"contributors":[{"name":"SocialSisterYi","username":"SocialSisterYi","email":"1440239038@qq.com","commits":3,"url":"https://github.com/SocialSisterYi"},{"name":"LaMerChiang","username":"LaMerChiang","email":"catlair@qq.com","commits":1,"url":"https://github.com/LaMerChiang"},{"name":"SessionHu","username":"SessionHu","email":"102411014+SessionHu@users.noreply.github.com","commits":2,"url":"https://github.com/SessionHu"}],"changelog":[{"hash":"1e24c6b1889160c4c35c01416aa4239501accf5f","time":1726759053000,"email":"102411014+SessionHu@users.noreply.github.com","author":"Session�胡","message":"调整部分接��述与错误修� (#1088)","coAuthors":[{"name":"社会易�QwQ","email":"45892418+SocialSisterYi@users.noreply.github.com"}]},{"hash":"60a0c5d1a2f44fe61335da04571305fa7727a968","time":1724238159000,"email":"102411014+SessionHu@users.noreply.github.com","author":"Session�胡","message":"feat: ��接�补充与错误修正 (#1066)"},{"hash":"92b30f354ab21b97fe52357161fd04e2ca687c97","time":1693842068000,"email":"catlair@qq.com","author":"LaMerChiang","message":"fix: 修正文档中存在的错误路径,标签和目录 (#806)"},{"hash":"f6760f4be38d5b592d396b211e48c666286524de","time":1677124138000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"🔨remove header index"},{"hash":"7d89ece2ac46425810647c4ac92acf5f3721cb68","time":1676998806000,"email":"1440239038@qq.com","author":"SocialSisterYi","message":"🚀调整项目结构"}]},"filePathRelative":"docs/login/login_action/password.md"}');export{b as comp,m as data};