【2019.05.26】JS逆向——破解 企名片 参数(encrypt_data)爬虫 超级详细

2023-10-31

参考这个博客,作者写的很流畅,一看就是个大佬,要向大佬学习
企名片地址
要获取图中数据。
在这里插入图片描述

分析请求

根据大佬博客的点拨,我们可以知道这个网站的数据都在这个参数当中,要获取这些数据,我们需要这个网页是怎么把这一段参数解析的。
在这里插入图片描述

解析参数 encrypt_data

加断点调试
我们可以找到解析该参数的function,然后把这个function中所有的方法(s, a.b.decode)方法的JS代码都抠出来作为解析该参数的JS代码
在这里插入图片描述

JS

encrtpt.data.js

function decrypt(t) {
            return (s("5e5062e82f15fe4ca9d24bc5", decode(t), 0, 0, "012345677890123", 1))
        }


function decode(t) {
    c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    f = /[\t\n\f\r ]/g
    var e = (t = String(t).replace(f, "")).length;
    e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
    (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
    for (var n, r, i = 0, o = "", a = -1; ++a < e; )
        r = c.indexOf(t.charAt(a)),
            n = i % 4 ? 64 * n + r : r,
        i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
    return o
}


function s(t, e, i, n, a, s) {
            var o, r, c, l, u, d, h, p, f, v, m, g, b, y, C = new Array(16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756), _ = new Array(-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344), w = new Array(520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584), x = new Array(8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928), k = new Array(256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080), T = new Array(536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312), A = new Array(2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154), L = new Array(268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696), S = function(t) {
                for (var e, i, n, a = new Array(0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964), s = new Array(0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697), o = new Array(0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272), r = new Array(0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144), c = new Array(0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256), l = new Array(0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488), u = new Array(0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746), d = new Array(0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568), h = new Array(0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578), p = new Array(0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488), f = new Array(0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800), v = new Array(0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744), m = new Array(0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128), g = new Array(0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261), b = t.length > 8 ? 3 : 1, y = new Array(32 * b), C = new Array(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0), _ = 0, w = 0, x = 0; x < b; x++) {
                    var k = t.charCodeAt(_++) << 24 | t.charCodeAt(_++) << 16 | t.charCodeAt(_++) << 8 | t.charCodeAt(_++)
                      , T = t.charCodeAt(_++) << 24 | t.charCodeAt(_++) << 16 | t.charCodeAt(_++) << 8 | t.charCodeAt(_++);
                    k ^= (n = 252645135 & (k >>> 4 ^ T)) << 4,
                    k ^= n = 65535 & ((T ^= n) >>> -16 ^ k),
                    k ^= (n = 858993459 & (k >>> 2 ^ (T ^= n << -16))) << 2,
                    k ^= n = 65535 & ((T ^= n) >>> -16 ^ k),
                    k ^= (n = 1431655765 & (k >>> 1 ^ (T ^= n << -16))) << 1,
                    k ^= n = 16711935 & ((T ^= n) >>> 8 ^ k),
                    n = (k ^= (n = 1431655765 & (k >>> 1 ^ (T ^= n << 8))) << 1) << 8 | (T ^= n) >>> 20 & 240,
                    k = T << 24 | T << 8 & 16711680 | T >>> 8 & 65280 | T >>> 24 & 240,
                    T = n;
                    for (var A = 0; A < C.length; A++)
                        C[A] ? (k = k << 2 | k >>> 26,
                        T = T << 2 | T >>> 26) : (k = k << 1 | k >>> 27,
                        T = T << 1 | T >>> 27),
                        T &= -15,
                        e = a[(k &= -15) >>> 28] | s[k >>> 24 & 15] | o[k >>> 20 & 15] | r[k >>> 16 & 15] | c[k >>> 12 & 15] | l[k >>> 8 & 15] | u[k >>> 4 & 15],
                        i = d[T >>> 28] | h[T >>> 24 & 15] | p[T >>> 20 & 15] | f[T >>> 16 & 15] | v[T >>> 12 & 15] | m[T >>> 8 & 15] | g[T >>> 4 & 15],
                        n = 65535 & (i >>> 16 ^ e),
                        y[w++] = e ^ n,
                        y[w++] = i ^ n << 16
                }
                return y
            }(t), z = 0, B = e.length, I = 0, F = 32 == S.length ? 3 : 9;
            p = 3 == F ? i ? new Array(0,32,2) : new Array(30,-2,-2) : i ? new Array(0,32,2,62,30,-2,64,96,2) : new Array(94,62,-2,32,64,2,30,-2,-2),
            2 == s ? e += "        " : 1 == s ? i && (c = 8 - B % 8,
            e += String.fromCharCode(c, c, c, c, c, c, c, c),
            8 === c && (B += 8)) : s || (e += "\0\0\0\0\0\0\0\0");
            var j = ""
              , $ = "";
            for (1 == n && (f = a.charCodeAt(z++) << 24 | a.charCodeAt(z++) << 16 | a.charCodeAt(z++) << 8 | a.charCodeAt(z++),
            m = a.charCodeAt(z++) << 24 | a.charCodeAt(z++) << 16 | a.charCodeAt(z++) << 8 | a.charCodeAt(z++),
            z = 0); z < B; ) {
                for (d = e.charCodeAt(z++) << 24 | e.charCodeAt(z++) << 16 | e.charCodeAt(z++) << 8 | e.charCodeAt(z++),
                h = e.charCodeAt(z++) << 24 | e.charCodeAt(z++) << 16 | e.charCodeAt(z++) << 8 | e.charCodeAt(z++),
                1 == n && (i ? (d ^= f,
                h ^= m) : (v = f,
                g = m,
                f = d,
                m = h)),
                d ^= (c = 252645135 & (d >>> 4 ^ h)) << 4,
                d ^= (c = 65535 & (d >>> 16 ^ (h ^= c))) << 16,
                d ^= c = 858993459 & ((h ^= c) >>> 2 ^ d),
                d ^= c = 16711935 & ((h ^= c << 2) >>> 8 ^ d),
                d = (d ^= (c = 1431655765 & (d >>> 1 ^ (h ^= c << 8))) << 1) << 1 | d >>> 31,
                h = (h ^= c) << 1 | h >>> 31,
                r = 0; r < F; r += 3) {
                    for (b = p[r + 1],
                    y = p[r + 2],
                    o = p[r]; o != b; o += y)
                        l = h ^ S[o],
                        u = (h >>> 4 | h << 28) ^ S[o + 1],
                        c = d,
                        d = h,
                        h = c ^ (_[l >>> 24 & 63] | x[l >>> 16 & 63] | T[l >>> 8 & 63] | L[63 & l] | C[u >>> 24 & 63] | w[u >>> 16 & 63] | k[u >>> 8 & 63] | A[63 & u]);
                    c = d,
                    d = h,
                    h = c
                }
                h = h >>> 1 | h << 31,
                h ^= c = 1431655765 & ((d = d >>> 1 | d << 31) >>> 1 ^ h),
                h ^= (c = 16711935 & (h >>> 8 ^ (d ^= c << 1))) << 8,
                h ^= (c = 858993459 & (h >>> 2 ^ (d ^= c))) << 2,
                h ^= c = 65535 & ((d ^= c) >>> 16 ^ h),
                h ^= c = 252645135 & ((d ^= c << 16) >>> 4 ^ h),
                d ^= c << 4,
                1 == n && (i ? (f = d,
                m = h) : (d ^= v,
                h ^= g)),
                $ += String.fromCharCode(d >>> 24, d >>> 16 & 255, d >>> 8 & 255, 255 & d, h >>> 24, h >>> 16 & 255, h >>> 8 & 255, 255 & h),
                512 == (I += 8) && (j += $,
                $ = "",
                I = 0)
            }
            if (j = (j += $).replace(/\0*$/g, ""),
            !i) {
                if (1 === s) {
                    var N = 0;
                    (B = j.length) && (N = j.charCodeAt(B - 1)),
                    N <= 8 && (j = j.substring(0, B - N))
                }
                j = decodeURIComponent(escape(j))
            }
            return j
}

执行JS,获取数据

#!/usr/bin/env python
# encoding: utf-8
# @software: PyCharm
# @time: 2019/5/29 15:25
# @author: Paulson●Wier
# @file: encrypt_data.py
# @desc:

import execjs
import json

encrypt_data = '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'

with open('encrypt_data.js') as f:
    js_encrypt = f.read()

ctx_encrypt = execjs.compile(js_encrypt)
decrypt_data = ctx_encrypt.call('decrypt',encrypt_data)
json_data = json.loads(decrypt_data)
print(json_data)

结果

在这里插入图片描述
以上,不登录的情况下可以得到这些数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【2019.05.26】JS逆向——破解 企名片 参数(encrypt_data)爬虫 超级详细 的相关文章

  • 使用 Python 编辑 RTF 文件

    也许这是一个愚蠢的问题 但我不明白 所以道歉 我有一个 RTF 文档 我想更改它 例如 有一个表 我想复制一行并以面向对象的方式更改代码中第二行中的文本 我认为 pyparsing 应该是可行的方法 但我摆弄了几个小时但没有明白 我没有提供
  • Python 和 Numpy 是 nan 和 set

    我在使用 Python 的 Numpy set 和 NaN 非数字 时遇到了不可预测的行为 gt gt gt set np float64 nan np float64 nan set nan nan gt gt gt set np flo
  • 为什么我的混淆矩阵只返回一个数字?

    我正在做二元分类 每当我的预测等于事实时 我发现sklearn metrics confusion matrix返回单个值 难道没有问题吗 from sklearn metrics import confusion matrix print
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • 如何为未捕获的异常处理程序编写单元测试

    我有一个函数可以捕获uncaught例外情况 如下 有没有办法编写一个单元测试来执行uncaught exception handler 功能正常 但测试正常退出 import logging def config logger logge
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 如何使用 Python boto3 获取 redshift 中的列名称

    我想使用 python boto3 获取 redshift 中的列名称 创建Redshift集群 将数据插入其中 配置的机密管理器 配置 SageMaker 笔记本 打开Jupyter Notebook写入以下代码 import boto3
  • 为什么第二个 request.session cookies 返回空?

    我想使用 requests Session post 登录网站 但是当我已经登录主页 然后进入帐户页面时 看来cookies还没有保存 因为cookies是空的 而且我无法进入正确的帐户页面 import requests from bs4
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • python celery -A 的无效值无法加载应用程序

    我有一个以下项目目录 azima init py main py tasks py task py from main import app app task def add x y return x y app task def mul
  • 为什么在Python解释器中输入_会返回True? [复制]

    这个问题在这里已经有答案了 我的翻译行为非常奇怪 gt gt gt True gt gt gt type True
  • numpy:如何连接数组? (获得多个范围的并集)

    我使用Pythonnumpy 我有一个 numpy 索引数组a gt gt gt a array 5 7 12 18 20 29 gt gt gt type a
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • 描述符“join”需要“unicode”对象,但收到“str”

    代码改编自here http wiki geany org howtos convert camelcase from foo bar to Foo Bar def lower case underscore to camel case s

随机推荐

  • MySQL--事务回滚机制与原理

    事务回滚机制 其实 讨论MySQL的事务回滚机制 也就是在说MySQL的事务原子性是如何实现的 关于事务之前文章中有过简单介绍 所谓原子性 就是指一个事务是一个不可分割的工作单位 其中的操作要么都做 要么都不做 如果事务中的一个sql语句执
  • 自旋锁(spin lock)与互斥量(mutex)的比较——多核编程学习笔记2

    自旋锁是一种非阻塞锁 也就是说 如果某线程需要获取自旋锁 但该锁已经被其他线程占用时 该线程不会被挂起 而是在不断的消耗CPU的时间 不停的试图获取自旋锁 互斥量是阻塞锁 当某线程无法获取互斥量时 该线程会被直接挂起 该线程不再消耗CPU时
  • 概率论知识点--上半学期

    第一章 概率论的基本概念 素材来源于B站猴博士 如有侵权立即删除 文章仅供学渣享用 大佬请移步 这里大部分是初中学的 引入了很少的几个概念 P A overline A A 1 P A 意思就是一件事的逆 一定等于一减这件事 P
  • 重装VMware后,导入保存在硬盘上的虚拟机系统,报错:不存在功能misc.rsba_no,但实际情况下应该存在。

    主机重装系统后 重装VMware 用新安装的VMware打开硬盘上的虚拟机系统文件 报错 不存在功能 misc rsba no 但实际情况下应当存在 模块 FeatureCompatLate 启动失败 未能启动虚拟机 是因为 iso 文件找
  • 数据结构:10大经典排序

    排序 1 冒泡排序 2 选择排序 3 插入排序 4 希尔排序 5 快速排序 6 归并排序 7 堆排序 8 计数排序 9 桶排序 10 基数排序 1 冒泡排序 冒泡排序 include
  • uni-app实战之社区交友APP(1)项目介绍和环境搭建

    文章目录 前言 一 项目介绍 二 环境搭建和创建项目 1 开发环境搭建 2 创建uni app项目 三 多端调试环境搭建 1 安卓手机调试配置 2 iOS真机调试配置 3 微信小程序调试配置 4 支付宝小程序调试配置 总结 如需查看本项目实
  • 微信小程序生成二维码

    1 复制 weapp qrcode js QR Code Generator for JavaScript Copyright c 2009 Kazuhiko Arase URL http www d project com License
  • flutter 的像素尺寸

    一般我们在android ios中都有自己的尺寸 如 dp pt 但是在flutter中写尺寸是没有单位的 如 SizedBox height 736 width 375 child Container color Colors light
  • 推荐一个超好用的视觉算法可视化分析工具

    First of all 先甩个项目github链接 https github com aiyojun cv algo analysis 如果觉得不错的给个star吧 鉴于视觉软件的开发成本太高 所以本人基于历史经验写了一个超级方便的可视化
  • vue项目编译打包到服务器,vue项目打包部署到服务器报错

    报错如下 webpack prod配置如下 const webpack require webpack const HtmlWebpackPlugin require html webpack plugin const ExtractTex
  • 【Linux基础IO之 内存文件操作】

    目录 前言 一 引入 C语言中的文件操作 系统文件操作 open 位图 权限 close write read lseek C语言中的文件操作函数与系统文件操作函数的联系 三 文件描述符 1 文件描述符是什么 2 文件缓冲区 再谈重定向 四
  • 虚拟机大小(1)

    2017 03 22 昨天也是弄了很久的虚拟机大小 这部分 我觉得还是应该从镜像的虚拟化角度来考虑 首先 我明白 分配出来的虚拟机大小 他当时分区的一些内容 都是跟最初制作镜像的时候相关的 因为这部分是写入到景象的磁盘里面去的 所以已经固化
  • (一)LTspice简介

    文章目录 前言 一 举例 1 1 RC滤波 1 2 仿真结果 二 软件安装 总结 前言 LTspice 是一款高性能SPICE仿真器软件 包括原理图捕获图形界面 可探测原理图以产生仿真结果 通过LTspice内置波形查看器轻松探索 与其他S
  • 【C++】map和set的介绍+使用

    前言 我们前面一起学习了二叉搜索树 这便是为了引入本章我们所学的map和set容器 map和set的底层实现就和二叉搜索树有关 目录 一 键值对的引入 1 关联式容器 2 键值对 二 set 1 set的介绍 2 set的使用 set的插入
  • 直接插入排序(有图,有实例)

    接下来从算法思想 实例讲解 代码实现 时间复杂度和空间复杂度 适用场景五个方面进 行讲解 目录 1 直接插入排序 2 折半插入排序 1 直接插入排序 算法思想 直接插入排序是一种最基本的插入排序方法 基本操作是将第i个记录插入到前面i 1个
  • FileReader FileInputStream InputStreamReader BufferedReader 作用与区别详解

    ava io下面有两个抽象类 InputStream和Reader InputStream是表示字节输入流的所有类的超类 Reader是用于读取字符流的抽象类 InputStream提供的是字节流的读取 而非文本读取 这是和Reader类的
  • 【华为OD机试2023】荒地电站建设 java

    荒地电站建设 代码仅供参考 若需使用请进行一定修改 提供java代码 题目 题目描述 祖国西北部有一片大片荒地 其中零星的分布着一些湖泊 保护区 矿区 整体上常年光照良好 但是也有一些地区光照不太好 某电力公司希望在这里建设多个 光伏电站
  • 01-windows调试工具(ProcDump使用)

    工具msdn下载地址 https learn microsoft com zh cn sysinternals downloads procdump csdn的下载地址 windows调试工具 C 文档类资源 CSDN下载 ProcDump
  • 使用注解开发(CRUD 注解增删改查)

    我们可以在工具类创建的时候实现自动提交事务 方法存在多个参数 所有的参数前面必须加上 Param 注解 注意 所有的基本类型和String类型都要加上 Param 如果是User和Map等等之类的对象不需要加 Param 注意事项 1 设置
  • 【2019.05.26】JS逆向——破解 企名片 参数(encrypt_data)爬虫 超级详细

    参考这个博客 作者写的很流畅 一看就是个大佬 要向大佬学习 企名片地址 要获取图中数据 分析请求 根据大佬博客的点拨 我们可以知道这个网站的数据都在这个参数当中 要获取这些数据 我们需要这个网页是怎么把这一段参数解析的 解析参数 encry