Skip to content
This repository has been archived by the owner on Apr 16, 2024. It is now read-only.

/utils/crypto.js 浏览器平台改写 #1839

Closed
2061360308 opened this issue Nov 12, 2023 · 4 comments
Closed

/utils/crypto.js 浏览器平台改写 #1839

2061360308 opened this issue Nov 12, 2023 · 4 comments

Comments

@2061360308
Copy link
Contributor

环境

  • 系统/平台: windows

  • nodejs 版本: v18.18.0

  • API版本: 4.13.8

出现问题

阅读了 /utils/crypto.js 后想将他用浏览器环境下的相关库替换掉node内置的crypto

重现步骤

其中 aesEncrypt 函数已经做到了,但是在处理rsaEncrypt 时(实际上具体是weapi用到了的secretKey不是字符串)的时候发现绕不开node内置的buffer,而第三方支持的库都要求传入一个字符串值。

我尝试将其使用Uint8Array并在加密前使用new TextDecoder("ascii")进行编码(尝试过所有的支持编码)都没有成功。

如果可以的话能否额外提示我该如何使用无填充模式,我很难找到一个第三方库支持这种加密方式,我自己尝试修改jsencrypt.js的源码将其的填充方法直接注释掉使用jsbn转换为大数,但由于buffer相关问题没有处理成功,所以也不能确定这个方式是否有效。

期待效果

最终目标是将写一个接口中间层让api运行在安卓本地

如果将/utils/crypto.js转换为浏览器环境可以执行的代码后,我就可以在 “ 删除掉request中的axios请求方法,和一些其他的不兼容的库“ 后实现在浏览器中就能运行接口并返回相关的请求信息,之后使用其他android类工具(如capacitor)提供的原生请求方法进行请求,从而让整个api都运行在本地。

  • 感谢您抽空给与我一些帮助 *
@Binaryify
Copy link
Owner

为啥要在浏览器端调用,有跨域问题,而且浏览器端有些header也不能设置,也没法自定义header里的cookie

@2061360308
Copy link
Contributor Author

并不能说是在浏览器里面用,我是想在 安卓 里面用。

先说我放弃的方案

  1. 安卓原生重写整个项目
  2. 找web开发原生app的框架(我用capacitor)模仿本项目用java给他写一个插件
  3. 使用capacitor中的NodeJs插件,在其中使用本项目

因为我不会Java而方案三的 NodeJs 插件很是不稳定,而且打包apk多20Mb左右很不划算, 所以才有了这个方案。

按我的理解本项目的核心 一是:找到对应的接口地址 二是:破解参数(params)的加密过程破解

在我看分析完相关的源码后我发现只要我改写/utils/crypto.js这个模块的内容,移除他对node的依赖,就能跨平台实现项目的运行

我的预计工作流程为:

  1. webview 运行改造后的项目返回 请求地址和params等的参数。
  2. 调用框架提供的原生平台http能力进行请求拿到最终数据。

这个方案的具体实施过程为:

  1. 改写/utils/crypto.js
  2. 利用capacitor的核心http插件(也封装了js)写一个类似本项目request的封装,进行请求并暴露类似项目文档中的明确接口
  3. 利用capacitor使用js继续完成安卓平台其他方面的开发

为啥要在浏览器端调用,有跨域问题,而且浏览器端有些header也不能设置,也没法自定义header里的cookie

@Binaryify
Copy link
Owner

明白了,就是不依赖nodejs自带库的方法,我今天试试吧

Binaryify added a commit that referenced this issue Nov 26, 2023
@Binaryify
Copy link
Owner

好了

ZhaoTonggang pushed a commit to ZhaoTonggang/NeteaseCloudMusicApi that referenced this issue Dec 23, 2023
* fix: 修复匿名登录下,部分接口提示网络太拥挤问题 Binaryify#1829

* update: Dockfile

* lock文件更新

* 修复 Docker 构建镜像安装依赖速度慢的问题

* update: dockerfile 配置更新

* CI 更新

* ci 更新

* CI 更新

* CI 更新

* CI 更新

* bump to 4.13.8

* chore: update type

* docs: sync type definition

* fix: error when query.id is number

* feat: 播客声音排序

* feat: 播客列表详情

* doc: 更新文档

* feat: crypto.js 重构 Binaryify#1839

* update:lock文件更新

* [fix] removed unnecessary console log in song_url_v1

* update: song upload use up-to-date ip

* fix: use variable bucket name

* feat:歌曲红心数量,歌曲音质详情,本地歌曲文件匹配网易云歌曲信息

feat:本地歌曲文件匹配网易云歌曲信息
feat:歌曲音质详情
feat:歌曲红心数量

* update: appver更新

* fix: lint error

* fix: /artist/detail  登录状态下调用提示网络拥挤的问题 Binaryify#1853

* Update README.MD

add Python SDK

* Update README.MD

* update: 文档更新

* update: 移除多余代码

* bump to 4.14.0

---------

Co-authored-by: binaryify <[email protected]>
Co-authored-by: WooMai <[email protected]>
Co-authored-by: 龙打野 <[email protected]>
Co-authored-by: Unics Yu <[email protected]>
Co-authored-by: Akane <[email protected]>
Co-authored-by: 5unV <[email protected]>
Co-authored-by: 盧瞳 <[email protected]>
Jerry-FaGe pushed a commit to Jerry-FaGe/NeteaseCloudMusicApi that referenced this issue Dec 28, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants