# 常见的加密方式
* md系列 md5 md2 md4 带密码的md5 加盐
           
        md5默认key 0123456789ABCDEF,0123456789abcdef
        md5 16位 32位
        
        字符串	123456
        16位 小写	49ba59abbe56e057
        32位 小写	e10adc3949ba59abbe56e057f20f883e
        
    
* sha1 sha256 sha512

        sha1 40位
            sha1（123456）= 7c4a8d09ca3762af61e59520943dc26494f8941b
        
        sha256 64位
            sha256（123456）= 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
            
        sha512 128位
            sha512（123456）= ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413

* 对称加密AES DES 3DES
* 非对称加密 RSA （公钥，私钥），同一个铭文可以生成不同密文

        16进制的加密: 0-9, A-F
        bs64：A-Z,a-z,0-9,+_=
        
# 搜狐登陆测试 

    https://www.sohu.com/?spm=smpc.content.nav.1.1632294495394YbeHAzu

通过登录请求

    userid: 18212122222
    password: e10adc3949ba59abbe56e057f20f883e
    persistentCookie: 1
    appid: 116005
    callback: passport403_cb1632294497123
    
发现一个秘密，password: e10adc3949ba59abbe56e057f20f883e 明文就是 123456

如何快速定位加密参数的位置呢？

搜索关键词

* password，password = ， userid， persistentCookie， appid 这些是参数关键词
* md5默认key 0123456789ABCDEF,0123456789abcdef能直接定位到md5代码实现内部
* i/login  请求的url
* 1732584193，1732584194 一些实现md5的魔法数字（前提是没有被重写过的md5）参考代码：https://blog.51cto.com/binghe001/2926433

这样就能快速找到密码明文数据。

# 方法一 找到搜狐登陆 md5

    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),
                        ....................
            }

js 中的‘：’是对象中的属性

    var ayf = {
        name: "AYF",
        md5: function(args) {
        
        }
    }

这里直接扣出md5加密代码在node.js中运行 [搜狐md5.js](搜狐md5.js)

这里直接扣包含这md5的对象在node.js中运行 [搜狐md5扣对象.js](搜狐md5扣对象.js)

    扣js改的越少越好，最好不改，体积大小越小越好

# 方法二 搜狐登陆 utils 对象

    这在是加密方法
    utils.md5(args.params.password)
    
我们全局搜索 utils=，发现只有一个地方有‘=’ ,找到你想要的变量 utils 将其变成全局变量

    utils = {....}
    window.ayf = utils; 
    var isSohu = /\.sohu.com/.test(location.host)

[搜狐md5全扣.js](搜狐md5全扣.js)