java模拟一个网站登录,用户名密码使用rsa加密。

1.需求,每天需要从不同的网站下不同的东西,需要你去写一个爬虫来搞。

2.执行。打开网站,输入用户名密码,登录,执行一系列操作

3.模拟登录,Java模拟登录我直接用httpclient,后面在用连接池

4.找到对方网站的publicKey

  找对方的publicKey比较麻烦,

  第一步,F12打开查看结构切到源代码,如下:

 

 

小弟前端不太熟悉,但是大概能猜出来,jquery一般都是什么什么组件。secuity下面有一个jsencrypt.min.js这个应该是rsa组件app.****.js应该就是编译后源代码

切换到网络

 

 

 没有发现公钥或者私钥什么的点击Fetch/XHR只有一个请求,并没有找到需要的东西

 

 

 那就只能看编译后的源代码:打开以后是这样子的有点懵逼,看到是webpack打包了。没找,硬着头皮找

 

 

 先了解webpack的打包以后的结构:参考网站:贼详细

https://app.yinxiang.com/fx/970ae39c-9964-4aae-aa96-7e81fee4ef8f

  从上面的网站了解到webpack的结构,那么就可以执行了,找到源代app.***.js,然后百度js格式化,我用的是:

https://tool.oschina.net/codeformat/js/

  格式化以后,复制到文件中查看结构

 

 

 找到如下代码以后,看页面的标签,并没有看到什么有用的标签或者什么东西,后来想到,有使用jsencrypt,来做加密,那么源码肯定有引用

 

 

 找JSEncrypt,确定登录方法,开始找公钥或者私钥,看到下面代码

n.setPublicKey(o.constant.privateKey)

  

 

 

 在做这个代码上面往上翻,看o是什么,是那个函数

 

 

 那就开始找

 

 

 找这个方法,找到一个敏感词汇:没想到居然有 privateKey的词汇。

 

 

 找到这个公钥,开始加密,既然这个网站用的 JSEncrypt 那我也直接用,省事

然后在加密的时候发现有一行代码:

(0, s.sha256)(e.username + e.password)???还用了sha256?我淦
t.showLoading(), t.axios({
                                method: "post",
                                url: p.loginUrl,
                                headers: {
                                    username: n.encrypt(e.username),
                                    tenantId: e.tenantId,
                                    appId: e.tenantId,
                                    password: n.encrypt(e.password),
                                    mac: n.encrypt((0, s.sha256)(e.username + e.password))
                                }
                            })...

  继续做:s.sha256,然后看看s是什么,往上翻代码发现:

s = n("OQ+U"),

  

 

 

 嗯哼,用的js-sha256,那么就直接用,完事测试

 

 

java代码:

@PostMapping("/encrypt")
    public String getEncrypt( Encrypt encrypt){
        boolean flag = false;
        //创建HttpPost请求
        HttpPost httpPost = new HttpPost("http://****/****/***/***");
        httpPost.setHeader("Accept", HttpCommons.Accept);
        httpPost.setHeader("User-Agent",HttpCommons.userAgent);
        try {
            httpPost.setHeader("****","****");
            httpPost.setHeader("****","****");
            httpPost.setHeader("****","****");
            httpPost.setHeader("username",encrypt.getUsername());
            httpPost.setHeader("password",encrypt.getPassword());
            CloseableHttpResponse response = null;
            //使用HttpClient发起请求
            response = (CloseableHttpResponse) httpClient.execute(httpPost);
            //判断响应状态码是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                //如果为200表示请求成功,获取返回数据
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                HashMap hashMap = JSON.parseObject(content, HashMap.class);
                 if(hashMap.get("msg").equals("登录成功") && Integer.valueOf(hashMap.get("code").toString()) == 0){
                     System.out.println(content);
                 }else{
                     System.out.println(content);
                 }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "ok";
    }

 测试结果

 

posted @ 2022-07-13 10:38  亮sir  阅读(1148)  评论(0编辑  收藏  举报