Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

部分设备使用了 RSA OAEP 进行数据传输,希望可以跟进 #1

Open
jshensh opened this issue Sep 2, 2021 · 3 comments
Open

Comments

@jshensh
Copy link

jshensh commented Sep 2, 2021

原始业务:

        doRSAEncrypt: function(encstring) {
            if (encstring === '') {
                return '';
            }
            if (gEncPublickey.e === '') {
                var pubkeyArray = getPubkey();
                if (pubkeyArray[0] === null || pubkeyArray[0] === '') {
                    pubkeyArray = this.requestEncpubkey();
                }
                gEncPublickey.e = pubkeyArray[1];
                gEncPublickey.n = pubkeyArray[0];
            }
            var rsa = new RSAKey();
            rsa.setPublic(gEncPublickey.n, gEncPublickey.e);
            var encStr = this.base64encode(encstring);
            var num = encStr.length / 245;
            if (EMUI.LoginStateController.rsapadingtype === '1') {
                num = encStr.length / 214;
            }
            var restotal = '';
            var rsan = gEncPublickey.n;
            for (var i = 0; i < num; i++) {
                if (EMUI.LoginStateController.rsapadingtype === '1') {
                    var encdata = encStr.substr(i * 214, 214);
                    var res = rsa.encryptOAEP(encdata);
                } else {
                    var encdata = encStr.substr(i * 245, 245);
                    var res = rsa.encrypt(encdata);
                }
                if (res.length !== rsan.length) {
                    i--;
                    continue;
                }
                restotal += res;
            }
            return restotal;
        }

具体就是通过 EMUI.LoginStateController.rsapadingtype 变量来判断,附一个我自己的针对 OAEP 的实现方式:
https://github.com/jshensh/Wahway-E8372h-820/blob/main/Wahway.php#L148-L165

@qwe7002
Copy link
Contributor

qwe7002 commented Sep 3, 2021

好的,非常感谢提供这些信息,我目前正在治疗肿瘤,暂时没有精力来负责这个项目。我会试图转交给有能力负责的人。非常抱歉

@jshensh
Copy link
Author

jshensh commented Sep 3, 2021

好的,非常感谢提供这些信息,我目前正在治疗肿瘤,暂时没有精力来负责这个项目。我会试图转交给有能力负责的人。非常抱歉

恩祝早日康复

@jixunmoe
Copy link
Collaborator

jixunmoe commented Oct 7, 2021

能否提供整个 JS 文件(含有 doRSAEncrypt 以及 rsa.encryptOAEP 函数的文件)?

另外手上没有对应的设备,不知道 EMUI.LoginStateController.rsapadingtype 这个值是如何获取的,如果可以也请提供赋值这个变量的代码,方便集成。

如果不清楚哪些文件含有关键信息,也可以提供浏览器抓包转储文件。在 Chrome 访问 Dongle 的后台页面,打开“开发者工具”,切换到“网络 (Network)”标签页,勾选“Disable cache”,按下 Ctrl-R 刷新页面并在后台页面打开登录弹窗确保资源加载完毕。回到开发者工具,右键任一网络请求项目并选择 “Save all as HAR with content” 保存网络流量至文件并上传。不需要 抓取含有登陆操作的请求。

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants