Js逆向教程-09常见的加密方式

news2025/7/13 20:26:01

作者:虚坏叔叔
博客:https://xuhss.com

早餐店不会开到晚上,想吃的人早就来了!😄

Js逆向教程-09常见的加密方式

常见的加密方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLvC2edJ-1668827715716)(../../1.png)]

一、js逆向流程

  1. 抓包
  2. 调试
  3. 扣去js
  4. 改写
  5. 本地运行

二、常见的加密方式

2.1取盐校验

不可逆。

md5

默认key:

0123456789ABCDEF

16进制,(16/32/40位)

字符串123456
16位 小写49ba59abbe56e057
16位 大写49BA59ABBE56E057
32位 小写e10adc3949ba59abbe56e057f20f883e
32位 大写E10ADC3949BA59ABBE56E057F20F883E

记住123456:16位已49开头,32位e10开头

sha加密

字符串123456
sha1(40位)7c4a8d09ca3762af61e59520943dc26494f8941b
sha256(64位)8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
sha512(128位)ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413

2.2对称加密和非对称加密

对称加密和非对称加密一般不是16、32、40、64、128位。

要么是16进制:(0-9,A-F)

要么是base64编码:如果字符串只包含下列字符,最后的1个或者2个字符是等号,大概率是base64编码:

A-Z a-z 0-9 + _ =

对称加密

通过明文数据加密文数据,在用同一个密钥将密文数据解密成明文数据。

  • AES
  • DES
  • 3DES

非对称加密

同一个明文可以生成不同的密文,不同的密文可以直接还原成同一个明文。

密钥有2个(公钥和私钥),客户端只有公钥,服务器有公钥和私钥。

  • RSA

关键key:

abcdefg

三、实战

以搜狐为例,可以看到是md5加密

在这里插入图片描述

3.1如何下断点

通过搜索password=搜索找到位置:

在这里插入图片描述

搜索userid也能找到:

在这里插入图片描述

搜索0123456789可以快速搜索到:

搜索魔法值:1732584193

通过这种方式最好,因为其他方式会加一些其他的密,会加盐。这种方式最快定位明文数据。

在这里插入图片描述

3.2扣去js

确认是否扣全了,如果只扣md5,需要修改的很多。将一个完整的this对象扣取下来,就会少很多代码。

this对象是什么?

var xuhss = {
	name:"xuhss",//值
	md5:function() // 方法
    {
        return "123"
    }
}

上面的xuhss是一个对象,那么md5是它的一个方法。

js只有对象用冒号。

对于md5来说,对象就是utils

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDq3r6uM-1668827715717)(02 - 副本.assets/image-20221119084036608.png)]

扣取js的原则就是:改的越少越好。各种方式都可以。

3.2.1只扣取md5

可以将整个js文件全部拷贝下来,然后放到notepad++中,用js格式化,折叠所有代码。找到md5方法.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSXxlffA-1668827715717)(02 - 副本.assets/image-20221119090859509.png)]

将这个方法放到另一个文件中去:

        md5: function(args) {
            function hex_md5(s) {
                return binl2hex(core_md5(str2binl(s), s.length * chrsz))
            }
            function core_md5(x, len) {
                x[len >> 5] |= 128 << len % 32,
                x[14 + (len + 64 >>> 9 << 4)] = len;
                for (var a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, i = 0; i < x.length; i += 16) {
                    var olda = a
                      , oldb = b
                      , oldc = c
                      , oldd = d;
                    a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936),
                    d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586),
                    c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819),
                    b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330),
                    a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897),
                    d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426),
                    c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341),
                    b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983),
                    a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416),
                    d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417),
                    c = md5_ff(c, d, a, b, x[i + 10], 17, -42063),
                    b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162),
                    a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682),
                    d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101),
                    c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290),
                    b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329),
                    a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510),
                    d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632),
                    c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713),
                    b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302),
                    a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691),
                    d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083),
                    c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335),
                    b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848),
                    a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438),
                    d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690),
                    c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961),
                    b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501),
                    a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467),
                    d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784),
                    c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473),
                    b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734),
                    a = md5_hh(a, b, c, d, x[i + 5], 4, -378558),
                    d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463),
                    c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562),
                    b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556),
                    a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060),
                    d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353),
                    c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632),
                    b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640),
                    a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174),
                    d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222),
                    c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979),
                    b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189),
                    a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487),
                    d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835),
                    c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520),
                    b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651),
                    a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844),
                    d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415),
                    c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905),
                    b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055),
                    a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571),
                    d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606),
                    c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523),
                    b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799),
                    a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359),
                    d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744),
                    c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380),
                    b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649),
                    a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070),
                    d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379),
                    c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259),
                    b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551),
                    a = safe_add(a, olda),
                    b = safe_add(b, oldb),
                    c = safe_add(c, oldc),
                    d = safe_add(d, oldd)
                }
                return Array(a, b, c, d)
            }
            function md5_cmn(q, a, b, x, s, t) {
                return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
            }
            function md5_ff(a, b, c, d, x, s, t) {
                return md5_cmn(b & c | ~b & d, a, b, x, s, t)
            }
            function md5_gg(a, b, c, d, x, s, t) {
                return md5_cmn(b & d | c & ~d, a, b, x, s, t)
            }
            function md5_hh(a, b, c, d, x, s, t) {
                return md5_cmn(b ^ c ^ d, a, b, x, s, t)
            }
            function md5_ii(a, b, c, d, x, s, t) {
                return md5_cmn(c ^ (b | ~d), a, b, x, s, t)
            }
            function safe_add(x, y) {
                var lsw = (65535 & x) + (65535 & y);
                return (x >> 16) + (y >> 16) + (lsw >> 16) << 16 | 65535 & lsw
            }
            function bit_rol(num, cnt) {
                return num << cnt | num >>> 32 - cnt
            }
            function str2binl(str) {
                for (var bin = Array(), mask = (1 << chrsz) - 1, i = 0; i < str.length * chrsz; i += chrsz)
                    bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32;
                return bin
            }
            function binl2hex(binarray) {
                for (var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef", str = "", i = 0; i < 4 * binarray.length; i++)
                    str += hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
                return str
            }
            var hexcase = 0
              , chrsz = 8;
            return hex_md5(args)
        }

直接运行这段代码会报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0i6LbDa-1668827715718)(02 - 副本.assets/image-20221119091218106.png)]

提示:这个函数需要函数名称 这时因为在对象可以这么定义方法,但是不在对象中,就需要改写

function md5(args)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnj6yW3l-1668827715719)(02 - 副本.assets/image-20221119095238124.png)]

3.2.2扣去完整的对象

utils = {
        extend: function() {
            var i, name, options, copy, target = arguments[0] || {}, len = arguments.length;
            for (i = 1; i < len; i++)
                if (null !== (options = arguments[i]))
                    for (name in options)
                        void 0 !== (copy = options[name]) && (target[name] = copy);
            return target
        },
        inArray: function(item, ary) {
            for (var i = 0; i < ary.length; i++)
                if (ary[i] === item)
                    return i;
            return -1
        },
        isString: function(o) {
            return "string" == typeof o
        },
        isFunction: function(o) {
            return "function" == typeof o
        },
        isBool: function(o) {
            return "boolean" == typeof o
        },
        bind: function(func, context) {
            return function() {
                func.apply(context, arguments)
            }
        },
        trim: function(str) {
            return this.isString(str) ? str.replace(/^\s+/, "").replace(/\s+$/, "") : str
        },
        param: function(o) {
            var ary = [];
            for (var key in o)
                ary.push(key + "=" + o[key]);
            return ary.join("&")
        },
        url: function(u, o) {
            return u += (/\?/.test(u) ? "&" : "?") + this.param(o)
        },
        md5: function(args) {
            function hex_md5(s) {
                return binl2hex(core_md5(str2binl(s), s.length * chrsz))
            }
            function core_md5(x, len) {
                x[len >> 5] |= 128 << len % 32,
                x[14 + (len + 64 >>> 9 << 4)] = len;
                for (var a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, i = 0; i < x.length; i += 16) {
                    var olda = a
                      , oldb = b
                      , oldc = c
                      , oldd = d;
                    a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936),
                    d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586),
                    c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819),
                    b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330),
                    a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897),
                    d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426),
                    c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341),
                    b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983),
                    a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416),
                    d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417),
                    c = md5_ff(c, d, a, b, x[i + 10], 17, -42063),
                    b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162),
                    a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682),
                    d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101),
                    c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290),
                    b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329),
                    a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510),
                    d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632),
                    c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713),
                    b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302),
                    a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691),
                    d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083),
                    c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335),
                    b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848),
                    a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438),
                    d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690),
                    c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961),
                    b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501),
                    a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467),
                    d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784),
                    c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473),
                    b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734),
                    a = md5_hh(a, b, c, d, x[i + 5], 4, -378558),
                    d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463),
                    c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562),
                    b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556),
                    a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060),
                    d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353),
                    c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632),
                    b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640),
                    a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174),
                    d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222),
                    c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979),
                    b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189),
                    a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487),
                    d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835),
                    c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520),
                    b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651),
                    a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844),
                    d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415),
                    c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905),
                    b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055),
                    a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571),
                    d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606),
                    c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523),
                    b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799),
                    a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359),
                    d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744),
                    c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380),
                    b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649),
                    a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070),
                    d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379),
                    c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259),
                    b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551),
                    a = safe_add(a, olda),
                    b = safe_add(b, oldb),
                    c = safe_add(c, oldc),
                    d = safe_add(d, oldd)
                }
                return Array(a, b, c, d)
            }
            function md5_cmn(q, a, b, x, s, t) {
                return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
            }
            function md5_ff(a, b, c, d, x, s, t) {
                return md5_cmn(b & c | ~b & d, a, b, x, s, t)
            }
            function md5_gg(a, b, c, d, x, s, t) {
                return md5_cmn(b & d | c & ~d, a, b, x, s, t)
            }
            function md5_hh(a, b, c, d, x, s, t) {
                return md5_cmn(b ^ c ^ d, a, b, x, s, t)
            }
            function md5_ii(a, b, c, d, x, s, t) {
                return md5_cmn(c ^ (b | ~d), a, b, x, s, t)
            }
            function safe_add(x, y) {
                var lsw = (65535 & x) + (65535 & y);
                return (x >> 16) + (y >> 16) + (lsw >> 16) << 16 | 65535 & lsw
            }
            function bit_rol(num, cnt) {
                return num << cnt | num >>> 32 - cnt
            }
            function str2binl(str) {
                for (var bin = Array(), mask = (1 << chrsz) - 1, i = 0; i < str.length * chrsz; i += chrsz)
                    bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32;
                return bin
            }
            function binl2hex(binarray) {
                for (var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef", str = "", i = 0; i < 4 * binarray.length; i++)
                    str += hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
                return str
            }
            var hexcase = 0
              , chrsz = 8;
            return hex_md5(args)
        }
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aHQ7eR64-1668827715720)(02 - 副本.assets/image-20221119101541452.png)]

总结

最后的最后
由本人水平所限,难免有错误以及不足之处, 屏幕前的靓仔靓女们 如有发现,恳请指出!

最后,谢谢你看到这里,谢谢你认真对待我的努力,希望这篇博客对你有所帮助!

你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!

💬 往期优质文章分享

  • C++ QT结合FFmpeg实战开发视频播放器-01环境的安装和项目部署
  • 解决QT问题:运行qmake:Project ERROR: Cannot run compiler ‘cl‘. Output:
  • 解决安装QT后MSVC2015 64bit配置无编译器和调试器问题
  • Qt中的套件提示no complier set in kit和no debugger,出现黄色感叹号问题解决(MSVC2017)
  • Python+selenium 自动化 - 实现自动导入、上传外部文件(不弹出windows窗口)

🚀 优质教程分享 🚀

  • 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
  • 🎄比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏
  • 🎄可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战 💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
❤️ C++ QT结合FFmpeg实战开发视频播放器❤️难度偏高分享学习QT成品的视频播放器源码,需要有扎实的C++知识!
💚 游戏爱好者九万人社区💚互助/吹水九万人游戏爱好者社区,聊天互助,白嫖奖品
💙 Python零基础到入门 💙Python初学者针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门

🚀 资料白嫖,温馨提示 🚀

关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【考研复试】计算机相关专业面试英语自我介绍范文(一)

文章目录前言&#xff1a;1.第一段&#xff1a;打招呼寒暄2.第二段&#xff1a;自我介绍3.第三段&#xff1a;为什么要读研4.第四段&#xff1a;个人优势5.第五段&#xff1a;立flag前言&#xff1a; 英语面试第一件事情就是让考生做自我介绍&#xff0c;考官可以借此机会了解…

图片编辑软件怎样加文字内容?图片添加文字方法大分享

大家平时在分享自己拍摄的照片时&#xff0c;有些时候会不会觉得照片有点单调&#xff0c;想在上面添加一些文字来装饰图片呢&#xff1f;又或者是在日常生活中&#xff0c;不小心拍到朋友的搞怪表情&#xff0c;这时候要是加上一些有趣的文字&#xff0c;就可以免费获得一个表…

Design A Twitter

title: Notes of System Design No.04 —Design a Twitter description: ’ Design a Twitter ’ date: 2022-05-14 09:50:32 tags: 系统设计 categories: 系统设计 00.What is Twitter 注&#xff1a;TimeLine 就是按照时间顺序显示的信息流 01. Functional Requirements 1…

特征工程(六)—(1)利用PCA进行特征转换

(1)鸢尾花数据集的手动处理 PCA利用了协方差矩阵的特征值分解 过程如下&#xff1a; (1)创建数据集的协方差矩阵 (2)计算协方差矩阵的特征值 (3)保留前K个特征值(按照特征值降序排列) (4)要保留的特征向量转换新的数据点 1、加载鸢尾花数据集 import matplotlib as mpl # 解…

js实现瀑布流

我们浏览网站的时候尤其是图片网站&#xff0c;我们会发现大大小小的图片&#xff0c;紧密的排列在一起&#xff0c;就像瀑布一样看着非常舒服&#xff0c;虽然css可以通过cloums来指定&#xff0c; 像我们这次的图片项目用的就是css实现的&#xff0c;最后布局是用grid布局写的…

【Spring(一)】如何获取对象(Bean)

目录 一、前言 二、Spring的下载 三、快速入门 四、IOC&#xff08;控制反转&#xff09; 五、创建XML配置文件 六、获取Bean   1. 按类型来获取Bean   2. 按id来获取Bean   3. 按idclass来获取Bean   4. 默认的一种特殊方式获取Bean   5. 有关id的一些说明 相关文章 Serv…

cpu设计和实现(流水线上的第一条指令)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 读书的时候&#xff0c;《计算机组成原理》也看了&#xff0c;《计算机体系结构》也学了&#xff0c;老师也给我们讲了各种各样的流水线知识&#…

Spring框架笔记

Spring51. 什么是Spring框架1.1 spring的特点2. IOC2.1 什么是IOC2.2. 基于xml的IOC2.2.1 创建对象2.2.2 给创建的对象赋值2.2.2.1 使用setter方法注入2.2.2.2 使用构造方法注入2.3 基于注解IOC2.3.1 创建对象的注解2.3.2 依赖注入的注解2.3.3 添加包扫描2.3.3.1 添加包扫描多种…

小目标检测:基于切图检测的yolov5小目标训练

目前在目标检测方面有着众多的检测框架&#xff0c;比如两阶段的FasterRcnn、以及yolo系列的众多模型。yolo系列在实际中用的最多&#xff0c;一方面性能确实不错&#xff0c;另一方面具有着较多的改进型系列。今天我们主要使用的yolov5系列。具体原理过程就不多说了&#xff0…

数字化助力生产制造管理:家具行业管理系统

中国家具产业经过近 40 年的发展&#xff0c;占到世界家具生产 1 /4 强&#xff0c;是全球生产和出口第一大国&#xff0c;在世界上有着广泛的影响和关注。中国家具产业也是国民经济的重要支柱产业&#xff0c;2018 年总产值达到16 000 亿元&#xff0c;占中国 GDP 2%多。 然而…

数据库高级 IV

数据库高级 IV 二分查找算法 定义 二分查找也称折半查找&#xff08;Binary Search&#xff09;&#xff0c;它是一种效率较高的查找方法。但是&#xff0c;折半查找要求线性表必须采用顺序存储结构&#xff0c;而且表中元素按关键字有序排列前提要求:1. 线性表必须采用顺序存…

[附源码]计算机毕业设计JAVA火车票预订系统2022

[附源码]计算机毕业设计JAVA火车票预订系统2022 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybat…

[附源码]SSM计算机毕业设计智能超市导购系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

STM32所有系列keil 开发包的下载链接 - Keil.STM32Fxxx_DFP.x.x.x.pack

文章目录1、官网下载链接及操作步骤2、关于Keil官网下载芯片包的网速很慢的解决办法1、官网下载链接及操作步骤 安装Keil之后&#xff0c;需要安装芯片包&#xff0c;但是在软件上面点击下载安装&#xff0c;会非常慢。还不如自己到官网下载的快。 官网下载地址&#xff1a;…

longjmp导致局部变量丢失

0 总结 longjmp与setjmp语句之间的变量赋值会丢失。变量须满足&#xff1a; 在调用setjmp函数中的局部变量&#xff08;栈变量&#xff09; &#xff0c;全局变量不受影响非volatile 解决方法&#xff1a;加volatile 1 问题复现 #include <setjmp.h> #include <s…

H5的基础

网页的学名称作HTML文件&#xff0c;是一种可以在www网上传输&#xff0c;并被浏览器认识和翻译成页面显示出来的文件。 HTML是&#xff1a;Hypertext Marked Language即超文本标记语言&#xff0c;是一种用来制作超文本文档的简单标记语言 超文本就是指页面内可以包含图片&…

六十分之九十——沉迷期的突破

目录一、目标二、计划三、完成情况四、提升改进(最少3点)五、意外之喜(最少2点)六、总结一、目标 明确可落地&#xff0c;对于自身执行完成需要一定的努力才可以完成的 1.8本技术管理书籍阅读(使用番茄、快速阅读、最后输出思维导图)2.得到"逻辑思维"、吴军硅谷来信…

WebRTC GCC 拥塞控制算法(REMB-GCC)

目录 一. 前言 二. REMB-GCC算法原理 1. 接收端基于延时梯度的带宽预估 &#xff08;1&#xff09;Arrival-time filter &#xff08;2&#xff09;Overuse Detector &#xff08;3&#xff09;Adaptive threshold &#xff08;4&#xff09;Remote Rate Controller &a…

【SQL】之索引

【SQL】之索引简单的索引设计方式innodb中的索引设计方式迭代一次迭代两次迭代三次btree聚簇索引二级索引&#xff08;非聚簇&#xff09;联合索引&#xff08;非聚簇&#xff09;InnoDB的B树索引的注意事项myISAM中索引设计方案索引是帮助mysql高效获取数据的数据结构简单的索…

查询

一、顺序查询 普通查找方式&#xff1a; int SeqSearch(int a[],int n,int k) {int i 0;while (i < n && a[i] ! k)i;if (i > n)return 0;elsereturn i 1; } 优化版查找方式&#xff1a; int OPSeqSearch(int a[], int n, int k) {int i 0;a[n] k;while …