deepseek网站前端密码加密逻辑分析与离线复现工具

网站前端密码加密逻辑分析与离线复现工具

请在我的 Windows 本机完成一个“网站前端密码加密逻辑分析与离线复现工具”项目。

工作目录固定为:

C:\WebCryptoLab

目标系统是我有权测试的专用测试环境。我授权你使用我随后提供的:

  • 测试地址

  • 测试用户名

  • 测试密码

进行登录流程分析。

允许为了确认密码转换逻辑,按需重复点击登录、提交登录表单以及向正常登录接口提交测试数据。

重复登录验证应保持正常人工测试频率,避免触发账号锁定、验证码、风控或影响系统正常运行。


一、真实性要求

本任务要求实际操作和实际验证。

不得:

  • 假装已经打开页面

  • 假装已经读取 JavaScript

  • 假装已经捕获请求

  • 假装已经执行本地代码

  • 假装已经验证候选密文

  • 仅依据密文长度猜测算法

  • 将浏览器捕获到的密码字段直接冒充为本地计算结果

如果当前运行环境无法直接操作我的 Windows 本机、无法控制浏览器、无法读取文件或无法执行命令,可以自行安装软件或者工具。

只能报告真正执行过和真正观察到的结果。

所有结论必须尽可能附带证据来源,并区分:

  • confirmed:已经通过源码、运行时或实际请求验证

  • inferred:有较强证据,但尚未直接验证

  • unknown:目前无法确定

  • not used:已经确认该步骤不存在或未参与登录密码处理

最终报告中原则上只把 confirmed 作为确定结论。


一-A、授权与重复确认

用户在对话中已经明确授权访问目标、下载资源、执行本地代码、提交测试登录后,对同一授权范围内的相同操作不要反复确认。

只有出现新的、超出已授权范围的高风险动作(例如修改系统配置、上传文件、删除数据)时才再次确认。


二、严格的两阶段执行流程

整个任务严格分为两个阶段。

阶段一:分析和确认

阶段一只进行分析、取证、本地复现和候选密文验证。

需要完成:

  1. 检查必要环境。

  2. 使用当前可用的受控浏览器(优先已安装 chatgpt 扩展的 Edge,也可使用 Chrome 或其他受控浏览器)打开测试标签页。

  3. 自动获取前端资源(HTML、JavaScript、动态 chunk、接口)。

  4. 分析 HTML、DOM、JavaScript、动态 chunk、接口和运行时调用。

  5. 定位密码处理函数。

  6. 定位公钥或其他密钥材料来源。

  7. 还原完整密码转换调用顺序。

  8. 使用我提供的测试明文在本地独立计算候选密文。

  9. 必要时使用正常登录请求验证分析结果。

  10. 向我输出候选密文、完整参数和证据摘要。

  11. 停止执行,等待我的人工确认。

阶段一不得提前创建最终交付目录,不得生成正式报告、GUI、批量工具或最终交接包。

阶段一硬停止条件

当已经获得一个具有充分证据支持的候选算法,并完成至少一次本地计算后:

立即向我提交候选结果。

然后停止。

只有当我明确回复:

密文正确

才允许进入阶段二。

如果我回复:

不正确

则继续阶段一分析,不得开始最终交付。


阶段二:最终交付

只有收到我明确回复:

密文正确

之后,才能开始阶段二。

阶段二包括:

  • 最终分析报告

  • 独立 Python 加密适配器

  • 批量转换工具

  • 拖拽工具

  • Tkinter GUI

  • 原始 JavaScript 归档

  • AI 复现交接包

  • 自动化测试

  • 最终目录清理


三、环境检查

开始阶段一后,首先检查:

  1. Windows 版本。

  2. PowerShell 版本。

  3. Python 3 及版本。

  4. Node.js 及版本。

  5. npm 及版本。

  6. npx 及版本。

  7. Chrome。

  8. Edge。

  9. Playwright 或当前环境实际可用的浏览器自动化工具;若是浏览器扩展类受控环境,同时确认是否可直接使用 CDP(Runtime.evaluate / Network / Input)驱动页面、读取真实 DOM 与抓取网络。

  10. 是否具备打开目标页面、读取 DOM、执行页面 JavaScript、查看控制台、捕获网络请求、读取响应内容、保存 JavaScript、执行本地 Python/Node.js 的能力(其中 DOM/JS/控制台/网络/保存 JS 的具体要求见第七、八、八-A、十节)。

已经安装并可用的组件不得重复安装。

遵循:

检测 → 确认缺失 → 确认确实需要 → 再安装

不得为了“可能会用到”而安装无关工具。

如果缺少 Python、Node.js、Playwright 或必要浏览器控制组件,可以安装,但安装前必须简要说明:

  • 为什么需要

  • 将安装什么

  • 修改什么位置

  • 是否影响系统全局环境

如果 npm.ps1 被 PowerShell 执行策略阻止,只允许修改:

CurrentUser

范围。

不得为了本项目修改整个系统的 PowerShell 执行策略。


四、明确不检查和不安装的组件

除非后续分析明确证明必需,否则不要检查或安装:

  • Java

  • JDK

  • Gradle

  • Maven

  • Burp Suite

  • OWASP ZAP

  • 数据库

  • Docker

  • 虚拟机软件


五、系统修改限制

内网自签名 HTTPS 证书只允许在本项目专用浏览器会话中忽略或接受。

如果要在本机脚本或命令行中访问该自签名 HTTPS,同样只允许在本次任务范围内使用一次性忽略方式(例如 curl -k、Invoke-WebRequest -SkipCertificateCheck、Python 的 ssl._create_unverified_context()),不得写入系统证书信任库。

不得为了本项目修改:

  • Windows 全局证书信任

  • 系统代理

  • 系统防火墙

  • 系统路由

  • DNS

  • hosts

  • 全局网络配置

除确实必要的软件安装和当前用户级设置外,不修改与本项目无关的系统配置。


六、凭据和敏感数据保护

测试用户名和密码只用于本次授权测试。

最终文件中不得保存:

  • 明文测试密码

  • 有效 JWT

  • 有效 Session

  • Cookie 完整值

  • Authorization 完整值

  • Refresh Token

  • Access Token

  • CSRF Token 的有效完整值

  • 其他可以直接复用的认证凭据

报告中的这些值必须脱敏。

例如:

Authorization: JWT eyJ...<redacted>

Cookie 只记录:

  • Cookie 名称

  • 是否存在

  • 是否参与认证

除非某个值本身是密码转换算法必需参数,否则不要保存完整敏感值。


六-A、测试密码字符确认

遇到 \@、\ (反斜杠+空格)、首尾空格、全角/半角、Unicode 形近字符(例如 l/I、0/O、·/•)等可能歧义时,先做一次字符级确认:回显实际字符与字节长度,并确保所有工具使用同一 UTF-8 字节序列。

不 strip、不把反斜杠当转义、不做大小写或全半角归一化,除非目标站点明确这样做。

只在确实存在字符歧义时确认,不逐条打断。


七、浏览器分析要求

使用受控 Chrome 或 Edge 打开登录页面。

如果受控浏览器通过扩展/插件提供自动化,且其 evaluate 是隔离只读上下文(例如看不到 fetch/performance,或读到旧的 DOM 值),则改用 CDP 的 Runtime.evaluate 读取真实页面状态、用 CDP Input 或原生事件驱动表单,并用 CDP Network 抓包;不要只依赖该隔离上下文判定交互是否生效。

首先记录:

  • 页面 URL

  • 页面标题

  • 页面路径

  • HTTP 状态

  • 是否发生重定向

  • 是否存在 iframe

  • 是否为 SPA

  • 使用的主要前端框架(如果能够确认)

读取 DOM 并定位:

  • 用户名输入框

  • 密码输入框

  • 验证码输入框

  • 登录按钮

  • 登录 Form

  • 登录事件处理逻辑

记录对应:

  • selector

  • id

  • name

  • type

  • autocomplete

  • 绑定事件


八、JavaScript 和资源分析

记录与登录有关的:

  • HTML

  • JavaScript

  • 动态 chunk

  • runtime chunk

  • vendor chunk

  • Source Map

  • 配置接口

  • 公钥接口

  • 登录接口

Source Map:

如果网站提供 .map 文件,则获取并分析。

如果网站未公开 Source Map:

标记:

Source Map: not available

不得将 Source Map 不存在视为任务失败。

保存登录加密相关 JavaScript 的网站原始响应内容。

原始 JS 必须记录:

  • 原始 URL

  • 原始文件名

  • HTTP Content-Type

  • 文件大小

  • SHA-256

  • 获取时间

如果 URL 包含 query hash,也需要记录完整资源 URL。

资源获取与下载失败处理见第八-A节。


八-A、资源获取优先级和下载失败处理

禁止只依赖浏览器下载列表中的“重试、保留”来获取前端资源。

当浏览器阻止 .js 下载,或命令行请求返回 404/错误页时,按以下优先级自动切换:

  1. 受控浏览器内直接抓取网络响应(CDP Network.enable + 刷新页面 + Network.getResponseBody)。

  2. 从页面解析出资源完整 URL 后,用本机 HTTP 客户端获取,并携带必要的 Referer、User-Agent、Sec-Fetch-*、临时会话信息、Accept-Encoding,再按压缩编码解压。

  3. 若目标是自签名 HTTPS,仅在本次任务范围内忽略证书校验。

同时必须处理:

  • 相对 URL 转绝对 URL

  • 压缩编码(Content-Encoding)

  • 动态 chunk 的懒加载

  • 把 404/错误页当作“获取失败”,不得当有效资源

保存时按浏览器实际执行的解压后 JS 落盘,同时记录 Content-Encoding 和原始完整 URL。用字节方式落盘(如 curl -o 或 Invoke-WebRequest -OutFile),不要向终端打印原始 JS 正文。


九、重点搜索关键词

先按以下顺序反向定位,避免无差别顺序通读大型压缩 JS:

  1. 先反查登录接口、请求字段名和事件处理函数(例如 token_auth、login、submit、click handler)。

  2. 再定位算法库与密钥相关函数(例如 JSEncrypt、setPublicKey、SM2、SM3、SM4、AES、CryptoJS)。

至少搜索:

password

passwd

pwd

encrypt

decrypt

JSEncrypt

RSAKey

setPublicKey

setPublic

PUBLIC_KEY

PUBLIC KEY

publicKey

modulus

exponent

nonce

timestamp

salt

hash

digest

PBKDF

SM2

SM3

SM4

AES

RSA

crypto

CryptoJS

login

signin

token_auth

同时根据实际源码继续扩展关键词。

搜索方法:对压缩成单行的 webpack 产物,用 rg -o '...{0,N}(关键词).{0,M}' 提取关键词上下文窗口,避免整行大输出;在 PowerShell 下不要用 *.js 通配符直接传给 rg,改为对整个目录或具体文件搜索。


十、运行时分析

不能只依赖静态搜索。

必要时使用浏览器运行时调试分析:

  • 登录按钮 click handler

  • Form submit handler

  • 密码读取位置

  • 加密函数入口

  • 加密函数参数

  • 加密函数返回值

  • 公钥设置位置

  • HTTP 请求构造位置

可以在专用测试浏览器会话中临时观察或 hook:

  • fetch

  • XMLHttpRequest

  • 登录提交函数

  • 密码加密函数

  • JSEncrypt.prototype.encrypt

  • setPublicKey

  • setKey

  • CryptoJS 对应函数

如果受控浏览器通过扩展提供,且 Playwright 的 evaluate 为隔离只读上下文,运行时观察应优先使用 CDP:Runtime.evaluate 读真实状态、Network 抓请求与响应体。给 React/受控输入框赋值时,使用原生 HTMLInputElement.prototype.value 的 setter 并派发 input 事件,再通过 Network 确认请求是否真实发出。

hook 只能用于观察浏览器本地运行过程。

不得修改服务端程序。

最终结论必须回到原始源码和实际网络请求进行对应验证。


十一、公钥和密钥来源分析

必须确认密码算法使用的密钥来自哪里。

可能包括:

  • JavaScript 硬编码

  • HTML 内嵌

  • 配置文件

  • API 返回

  • LocalStorage

  • SessionStorage

  • Cookie

  • 全局变量

  • 页面初始化接口

  • 登录前动态接口

如果存在多个候选公钥,必须确认最终传递给加密函数的是哪一个。

特别检查是否发生:

默认公钥 → 接口返回新公钥 → setPublicKey() 覆盖

如果发生动态覆盖,需要保存证据。

至少比较:

  1. 初始源码中的公钥。

  2. 初始化接口返回的公钥。

  3. 运行时传递给加密函数的最终公钥。


十二、密码转换链必须完整确认

必须还原从密码输入框到最终请求字段的完整链路。

例如:

用户输入

→ 读取 input.value

→ 字符处理

→ 拼接随机参数

→ UTF-8

→ Hash

→ RSA

→ Base64

→ URL encode

→ application/x-www-form-urlencoded

这只是示例,不得预设目标实际流程。

必须逐项确认:

输入

  • 原始字符编码

  • JavaScript String 行为

  • UTF-8 / UTF-16 等编码

  • 是否 trim

  • 是否 lowercase

  • 是否 uppercase

  • 是否截取

  • 是否拼接

  • 是否增加固定前后缀

Hash / KDF

检查:

  • MD5

  • SHA-1

  • SHA-256

  • SHA-512

  • SM3

  • PBKDF2

  • HMAC

  • 自定义 Hash

如果不存在则标记:

not used

对称加密

检查:

  • AES

  • SM4

  • DES

  • 3DES

  • 自定义算法

如果不存在:

not used

非对称加密

检查:

  • RSA

  • SM2

  • EC

  • 其他算法

确认:

  • 密钥长度

  • 指数

  • modulus

  • 公钥格式

  • 填充

RSA 填充至少区分:

  • PKCS#1 v1.5

  • OAEP

  • Raw RSA

  • unknown

OAEP 必须进一步确认:

  • OAEP Hash

  • MGF Hash

  • Label

随机参数

检查:

  • 随机 padding

  • nonce

  • salt

  • timestamp

  • IV

  • session key

输出

确认:

  • Hex

  • Base64

  • Base64URL

  • URL Encode

  • Form Encode

  • JSON String

  • 二次编码

并确认编码顺序。


十三、公钥格式

必须区分实际格式,例如:

  • PEM SubjectPublicKeyInfo

  • PEM PKCS#1 RSA PUBLIC KEY

  • DER

  • modulus + exponent

  • Hex

  • Base64 DER

保存的:

登录加密公钥.pem

必须对应浏览器实际最终使用的公钥。

如果浏览器最终不是 PEM 形式,也需要生成等价 PEM 供 Python 使用,同时在报告中明确:

  • 网站原始格式

  • 转换后的 PEM 格式

  • 转换方法


十四、登录请求分析

使用提供的测试账号进入密码提交阶段并捕获正常登录请求。

记录:

  • HTTP Method

  • Scheme

  • Host

  • Port

  • Path

  • Query

  • Content-Type

  • 请求字段名称

  • 密码字段名称

  • 其他必要字段名称

例如只记录脱敏结构:

POST /xxx/login

Content-Type:
application/x-www-form-urlencoded

username=<test-user>
password=<encrypted-value>
captcha=<redacted>

不得在最终报告保存有效认证 Token。


十五、同一明文重复测试

至少对同一测试明文执行多次本地加密。

确认:

encrypt(P)

是否每次产生相同结果。

如果不同:

分析差异来自:

  • PKCS#1 v1.5 随机 padding

  • OAEP seed

  • SM2 随机 k

  • nonce

  • salt

  • timestamp

  • IV

  • 其他随机值

例如 RSA PKCS#1 v1.5 与 SM2 均属随机加密,每次密文通常不同;候选密文无需与浏览器历史密文逐字相同。

随机算法产生不同密文属于正常情况。

不能使用:

浏览器密文 == Python 密文

作为随机算法唯一正确性判断。


十六、候选密文必须在本地计算

阶段一最终候选密文必须由分析出的算法在 Windows 本机生成。

可以捕获浏览器实际请求中的密码字段作为对照。

但是必须明确区分:

浏览器捕获值

来自目标网站原始 JavaScript。

本地候选值

来自本地独立实现。

不得把浏览器抓到的字段复制后声称是本地算法计算结果。


十七、候选密文验证

可以使用本地候选密文向目标正常登录接口进行验证。

验证只允许使用:

  • 用户提供的测试用户名

  • 用户提供的测试密码

  • 正常登录接口

  • 正常登录流程所需字段

必须区分:

  • 本地结构验证:密文长度、字节结构、输出格式、算法参数、与站点 JS 的交叉验证。

  • 服务端接受验证:只有实际提交登录并观察到服务端响应,才能报告“服务端返回 X”。若服务端对错误密码统一返回同一消息(例如 用户名或密码错误),不得据此声称“服务端已接受”,只能如实记录响应。

如果算法是随机算法:

候选密文与浏览器密文字符串不同不能直接判定失败。

应综合验证:

  • 解码后的密文 byte 长度

  • 密钥长度

  • 算法参数

  • 输出格式

  • 浏览器执行路径

  • 请求格式

  • 目标服务器返回的响应


十八、阶段一输出格式

阶段一得到候选算法后,向我输出:

测试明文标签:

不要再次打印实际测试密码,可写:

用户提供的测试密码

字符编码:

预处理:

Hash / KDF:

加密算法:

密钥长度:

公钥格式:

公钥指数:

填充方式:

OAEP Hash:

随机参数:

nonce:

salt:

timestamp:

输出编码:

URL/Form 编码:

密文字节长度:

密文字符串长度:

候选密文:

随机加密:是 / 否

最终请求接口:

密码字段:

确定项:

推断项:

不确定项:

关键源码证据:

运行时证据:

本地实现验证结果:

然后明确提示:

等待你回复“密文正确”或“不正确”。

并立即停止阶段一。


十九、阶段二最终目录

只有收到:

密文正确

后创建:

C:\WebCryptoLab\最新版本\

最终目录结构:

C:\WebCryptoLab\最新版本\

├─ 目标名称_登录密码加密分析报告.html

├─ 使用说明.html

├─ 密码转换工具\
│  ├─ 加密适配器.py
│  ├─ 批量加密.py
│  ├─ 拖拽加密.cmd
│  └─ 测试\
│     ├─ 单条加密图形工具.py
│     └─ 自动化测试.py

└─ 原始文件\
   ├─ 文件清单与复现入口.html
   ├─ 给AI的完整复现说明.html
   ├─ 复现参数.json
   ├─ 登录加密公钥.pem
   ├─ 目标名称_登录密码加密分析报告.html
   ├─ 前端JS\
   │  └─ 网站返回的原始 JavaScript 文件
   └─ 参考实现\
      ├─ 加密适配器.py
      ├─ 批量加密.py
      ├─ 拖拽加密.cmd
      └─ 自动化测试.py

目录和人工阅读文件使用中文名称。


二十、Windows 文件名规范

目标地址不得直接原样作为 Windows 文件名。

必须将:

  • https://

  • http://

  • /

  • \

  • :

  • ?

  • *

  • "

  • <

  • >

  • |

转换为 Windows 合法名称。

例如:

https://10.10.187.187:8443/login

可以生成:

10.10.187.187_8443_登录密码加密分析报告.html


二十一、HTML 报告

分析报告必须是:

  • UTF-8

  • 自包含 HTML

  • 无外部 CDN 依赖

  • 双击即可阅读

至少包含:

  1. 测试时间。

  2. 目标地址。

  3. 登录页面路径。

  4. 结论摘要。

  5. 完整密码转换流程。

  6. 字符编码。

  7. 输入预处理。

  8. Hash/KDF。

  9. 加密算法。

  10. 密钥长度。

  11. 公钥格式。

  12. modulus。

  13. exponent。

  14. 填充。

  15. 随机数。

  16. nonce。

  17. salt。

  18. timestamp。

  19. 输出编码。

  20. URL/Form 编码。

  21. JavaScript 文件 URL。

  22. JavaScript 文件名。

  23. SHA-256。

  24. 模块编号。

  25. 函数名。

  26. 函数作用。

  27. 调用顺序。

  28. 必要的关键代码片段。

  29. 请求 Method。

  30. 请求 Path。

  31. Content-Type。

  32. 请求字段。

  33. 脱敏请求结构。

  34. 验证向量。

  35. 密文 byte 长度。

  36. 密文字符串长度。

  37. 用户确认结果。

  38. 自动化测试结果。

  39. 已知限制。

所有关键参数分别标记:

  • confirmed

  • inferred

  • not used

  • unknown

不得将推测写成确认结果。


二十二、最终 Python 加密适配器

最终:

加密适配器.py

必须是独立实现。

目标是:

无需访问目标网站即可完成同等密码转换。

如果算法依赖固定公钥:

公钥本地保存。

如果算法确实依赖服务器每次动态下发:

必须在阶段一明确说明,这种情况下不得虚假宣称工具“完全离线”。

应区分:

  • 完全离线可复现部分

  • 必须动态获取部分

适配器、批量工具、GUI 默认不产生任何网络请求;只有当用户显式要求联网验证时才允许提交登录。

除非已经证明必要,最终 Python 代码不得依赖:

  • Chrome

  • Edge

  • Playwright

  • Selenium

  • 目标网站 JavaScript

  • Node.js

  • 在线 CDN


二十三、批量转换工具

批量加密.py

读取:

UTF-8 或 UTF-8 BOM TXT。

格式:

每行一个明文。

必须正确支持:

  • CRLF

  • LF

  • UTF-8 BOM

  • 中文

  • 特殊字符

  • 普通空格

  • 重复项

必须保留:

  • 行顺序

  • 重复项

  • 首部普通空格

  • 尾部普通空格

不得对密码执行:

.strip()

默认:

空行 = 空密码。

支持:

--skip-empty

跳过空行。

单行失败不得导致整个任务退出。

必须限制:

  • 最大输入文件大小

  • 最大行数

具体限制写入:

使用说明.html


二十四、批量工具命令

调用:

python 批量加密.py "C:\路径\passwords.txt"

输出到输入 TXT 同目录:

原文件名_encrypted.txt
原文件名_results.json

encrypted.txt

每行一个成功生成的密文。

results.json

记录:

  • 原始行号

  • 状态

  • 密文

  • 错误原因

例如:

{
  "line": 3,
  "status": "success",
  "ciphertext": "..."
}

或者:

{
  "line": 4,
  "status": "error",
  "error": "message too long"
}

即使某行失败,也必须继续处理后续行。


二十五、RSA 明文长度限制

如果最终算法为 RSA 等存在最大明文长度限制的算法:

必须计算并实现正确的最大输入限制。

超长输入应:

  • 返回清晰错误

  • 写入 results.json

  • 不影响后续行

自动化测试中的“超长输入”允许预期失败。

这种预期失败应视为测试通过。


二十六、拖拽工具

把 TXT 文件拖到:

拖拽加密.cmd

上必须正常运行。

必须实际测试:

  • 中文目录

  • 中文 TXT 文件名

  • 带空格路径

  • 多个空格

  • CRLF

  • UTF-8 BOM

CMD 为避免代码页问题:

  1. 内容尽量保持纯 ASCII。

  2. 不在 CMD 内直接硬编码中文 Python 脚本文件名。

  3. 自动识别同目录中的批量处理 Python 文件。

  4. 使用 %* 保留完整拖拽参数。

  5. 保留双引号。

  6. 设置:

PYTHONDONTWRITEBYTECODE=1
  1. Python 不存在时显示明确错误。

  2. 执行失败时保持窗口。

  3. 成功时显示输出文件位置。


二十七、GUI

创建:

单条加密图形工具.py

使用:

Tkinter

必须:

  1. 输入一条明文。

  2. 点击按钮进行加密。

  3. 显示最终密文。

  4. 显示密文字符串长度。

  5. 显示密文字节长度。

  6. 提供复制按钮。

  7. 提供清空按钮。

  8. 错误时显示清晰信息。

  9. 与批量工具共用同一个 加密适配器.py。

  10. 不复制第二套算法代码。

  11. 默认不产生任何网络请求。

程序结构必须包含:

def main():
    ...

if __name__ == "__main__":
    main()

二十八、原始文件交接包

原始文件

文件夹必须能够单独交给另一名 AI。

另一名 AI 不访问本次聊天记录,也应该能够重新制作出等价工具。


二十九、文件清单与复现入口

创建:

文件清单与复现入口.html

说明:

  1. 每个文件的用途。

  2. 推荐阅读顺序。

  3. 从哪里开始复现。

  4. 如何运行参考实现。

  5. 如何运行自动化测试。

  6. 关键 JS 在哪里。

  7. 公钥在哪里。

  8. 参数 JSON 在哪里。


三十、给 AI 的完整复现说明

创建:

给AI的完整复现说明.html

必须明确说明:

  • 目标登录接口

  • HTTP Method

  • Content-Type

  • 请求字段

  • 密码字段

  • JavaScript 完整调用顺序

  • 输入字符编码

  • 预处理

  • Hash/KDF

  • 算法

  • 密钥长度

  • modulus

  • exponent

  • padding

  • 公钥来源

  • 公钥动态覆盖逻辑

  • nonce

  • salt

  • timestamp

  • 随机行为

  • 输出编码

  • URL/Form 编码

  • JavaScript 关键文件

  • 模块编号

  • 函数名

  • Python 对应实现

  • 测试入口

  • 已知限制


三十一、复现参数.json

复现参数.json

必须是机器可读 JSON。

至少包含:

target
login_page
login_endpoint
http_method
content_type
username_field
password_field
character_encoding
preprocessing
hash
kdf
encryption_algorithm
key_size
public_exponent
public_key_format
padding
oaep_hash
nonce
salt
timestamp
output_encoding
transport_encoding
randomized
public_key_source
public_key_dynamic_override
javascript_files
javascript_modules
functions
call_chain
validation
limitations

不存在的参数填写:

null

并通过独立状态字段标记:

  • confirmed

  • inferred

  • not_used

  • unknown


三十二、原始 JavaScript

原始文件\前端JS\

保存服务器实际返回的、与登录加密相关的原始 JavaScript。

必须保留网站原文件名。

如果发生同名冲突,可以追加原始文件内容 SHA-256 前 8 位。

同时在交接说明中维护映射:

URL
→ 本地文件名
→ SHA-256
→ 模块
→ 相关函数

禁止只保存 prettify 后版本而丢失原文件。


三十三、参考实现

原始文件\参考实现\

必须包含可独立运行的:

  • 加密适配器.py

  • 批量加密.py

  • 拖拽加密.cmd

  • 自动化测试.py

测试必须能够直接从:

原始文件\参考实现

目录运行。

不得依赖:

密码转换工具

中的文件。

不得依赖项目根目录中的临时文件。


三十四、自动化测试

至少覆盖:

  1. 空文件。

  2. 单个空行。

  3. 多个空行。

  4. 默认空行为密码。

  5. --skip-empty。

  6. 首部空格。

  7. 尾部空格。

  8. 多个连续空格。

  9. 中文。

  10. 特殊字符。

  11. Unicode。

  12. 超长输入。

  13. UTF-8。

  14. UTF-8 BOM。

  15. CRLF。

  16. LF。

  17. 重复密码。

  18. 单行失败隔离。

  19. 输出顺序。

  20. 输出数量。

  21. 随机加密行为。

  22. 中文目录。

  23. 中文文件名。

  24. 带空格目录。

  25. 带空格文件名。

  26. 拖拽 CMD。

  27. GUI Python 语法。

  28. HTML UTF-8 解析。

  29. JSON 合法性。

  30. 公钥解析。

  31. 从原始文件\参考实现独立运行。

  32. 反斜杠作为真实字符保留。

  33. Admin@123 与 Admin\@123 必须被识别为不同输入。

  34. 离线工具默认不产生任何网络请求。

如果算法属于随机加密:

自动化测试不能要求两次密文字符串完全相等。

应测试:

  • 两次加密均成功

  • 密文字节长度正确

  • Base64/Hex 解码正确

  • 明文不直接出现在密文中

  • 如果可以进行私钥测试,则验证可恢复明文

  • 如果没有私钥,则使用其他算法结构验证方法


三十五、最终清理

只有:

  1. 阶段二全部文件已经生成;

  2. 自动化测试已经执行;

  3. 关键交付文件已经确认存在;

之后才能执行清理。

清理范围只允许是:

C:\WebCryptoLab

中由本项目本次执行创建的文件和目录。

如果 C:\WebCryptoLab 在任务开始前已经存在用户文件:

不得删除这些文件。

任务开始时应记录原有内容,以区分:

  • 用户原有文件

  • 本项目新建文件

最终目标是项目自身只保留:

C:\WebCryptoLab\最新版本\

删除本项目产生的:

  • 旧版本目录

  • 重复目录

  • 重复报告

  • 临时测试输入

  • 临时测试输出

  • 调试文件

  • Markdown 说明

  • __pycache__

  • .pyc

  • 浏览器临时下载文件

不得删除无法确认属于本项目的文件。


三十六、最终验收检查

阶段二完成后逐项检查:

  • 最新版本目录存在

  • 分析报告存在

  • 使用说明存在

  • 加密适配器存在

  • 批量工具存在

  • 拖拽工具存在

  • GUI 存在

  • 自动化测试存在

  • 原始 JS 存在

  • JS SHA-256 已记录

  • 公钥存在

  • 复现参数.json 合法

  • AI 复现说明存在

  • 原始文件参考实现可以独立运行

  • 中文路径测试通过

  • 空格路径测试通过

  • 拖拽测试通过

  • GUI 语法检查通过

  • HTML UTF-8 解析通过

  • 不存在 pycache

  • 不存在 Markdown 说明

  • 不包含有效密码、JWT、Cookie 或 Session

  • 除用户原有文件外,不残留本项目临时文件


三十七、最终执行报告

全部完成后向我报告:

  1. Windows 和 PowerShell 版本。

  2. Python 版本。

  3. Node.js/npm/npx 版本。

  4. 使用的浏览器及版本。

  5. 使用的浏览器自动化工具及版本。

  6. 浏览器是否成功访问目标。

  7. 最终确认算法。

  8. 输入字符编码。

  9. 预处理。

  10. Hash/KDF。

  11. 密钥长度。

  12. 公钥格式。

  13. 公钥来源。

  14. 公钥是否动态覆盖。

  15. exponent。

  16. padding。

  17. nonce/salt/timestamp。

  18. 输出编码。

  19. Form/URL 编码。

  20. 使用的 JS 文件。

  21. JS SHA-256。

  22. 模块编号。

  23. 函数名。

  24. 完整调用顺序。

  25. 登录接口。

  26. 密码字段。

  27. 报告路径。

  28. 批量工具路径。

  29. GUI 路径。

  30. 原始文件交接包路径。

  31. 自动化测试通过数量。

  32. 自动化测试失败数量。

  33. 拖拽测试结果。

  34. 中文路径测试结果。

  35. 空格路径测试结果。

  36. 已知限制。

所有路径使用绝对 Windows 路径。


三十八、开始方式

现在不要提前安装工具,也不要开始猜测算法。

测试地址、测试用户名、测试密码三项一旦在对话中给齐,就直接开始阶段一,不再索取。

只对真正缺失或存在字符歧义的内容追问。

在我明确回复:

密文正确

之前,绝对不要进入阶段二。

此博客中的热门博文

酷狗音乐MP3下载助手 - 下载状态修复版

下载谷歌浏览器

Office 微软官方部署流程