You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将明文Facebook密码加密为#PWD_BROWSER格式后再发送?

如何将明文Facebook密码加密为#PWD_BROWSER格式后发送?

Facebook会在发送登录请求到服务器前,对明文密码进行加密。比如使用测试凭证登录时,POST请求体如下:

email: test12345@gmail.com
login_source: comet_headerless_login
encpass: #PWD_BROWSER:5:1683905042:AcZQAJrk/vksWHThqOkelJMFc6UCV35HSZY5kIlN8qfRPxxMAtKIaV0h+e5ACcb8PXPqTx3m5D+lOp+ylB+CY6WMmsyIwrx5sxBvurrCtQX3Re+aGM/VfITIVk9HnQMkvlx9ZMJJjF2zW6Ym5g== 

上述内容中,明文密码test12345被加密成了encpass对应的字符串

我已经了解到#PWD_BROWSER和后面的5是固定值,1683905042是时间戳,但无法解析后续的加密部分。我从Facebook页面源码中找到了密码加密的前置函数,但仍不清楚具体实现:

_encryptBeforeSending: function(a) {
            a = a.bind(h);
            var d = h.loginFormParams && h.loginFormParams.pubKey;
            if ((window.crypto || window.msCrypto) && d) {
                var e = c("DOM").scry(h.loginForm, 'input[id="pass"]')[0],
                    f = b("FBBrowserPasswordEncryption"),
                    g = Math.floor(Date.now() / 1e3).toString();
                c("promiseDone")(f.encryptPassword(d.keyId, d.publicKey, e.value, g), function(b) {
                    b = c("DOM").create("input", {
                        type: "hidden",
                        name: "encpass",
                        value: b
                    });
                    h.loginForm.appendChild(b);
                    e.disabled = !0;
                    a()
                }, function(c) {
                    var d = "#PWD_BROWSER",
                        e = 5,
                        f = b("LoginServicePasswordEncryptDecryptEventTypedLogger");
                    new f().setError("BrowserEncryptionFailureInLoginFormControllerWWW").setGrowthFlow("Bluebar/main login WWW").setErrorMessage(c.message).setPasswordTag(d).setPasswordEncryptionVersion(e).setPasswordTimestamp(g).logVital();
                    a()
                })
            } else a()
        },

实现步骤

1. 获取登录页面的公钥参数

Facebook登录页面加载时,会在页面上下文注入包含公钥的loginFormParams对象,其中pubKey字段包含keyId和publicKey两个核心值。你可以通过浏览器控制台执行对应变量(比如源码中的h.loginFormParams.pubKey)获取,或者从页面初始化的脚本数据中提取。

2. 模拟加密逻辑

从源码可知,加密依赖FBBrowserPasswordEncryption的encryptPassword方法,底层实际是基于**公钥加密算法(大概率是RSA)**结合时间戳处理密码,具体流程可以用Web Crypto API模拟:

  • 将获取到的公钥转换为Web Crypto支持的CryptoKey对象(注意公钥格式,通常是PEM或JWK)
  • 拼接明文密码和时间戳(格式为{明文密码}{时间戳},比如test123451683905042)
  • 使用RSA加密算法(推荐RSA-OAEP,符合现代安全标准)加密拼接后的字符串
  • 将加密后的二进制数据转换为Base64编码字符串
  • 按照固定格式拼接成encpass值:#PWD_BROWSER:5:{时间戳}:{Base64加密内容}

3. 构造并发送POST请求

将email、login_source、生成的encpass等参数放入POST请求体,发送到Facebook的登录接口即可。

注意事项

  • Facebook的公钥会定期更新,每次登录都需要重新获取当前页面的有效公钥
  • 加密细节可能会随版本调整,建议通过调试浏览器中FBBrowserPasswordEncryption的实际实现来验证逻辑
  • 请严格遵守Facebook的服务条款,不要用于违规操作

内容的提问来源于stack exchange,提问作者vidgusting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:05:37