JS逆向---加密算法
摘要算法
在 JavaScript
中和 Python
中的基本实现方法,遇到 JS
加密的时候可以快速还原加密过程,有的网站在加密的过程中可能还经过了其他处理,但是大致的方法是一样的。
消息摘要算法/签名算法:MD5、SHA、HMAC
1. MD5
简介:全称 MD5
消息摘要算法,又称哈希算法、散列算法,由美国密码学家罗纳德·李维斯特
设计,于 1992 年作为 RFC 1321 被公布,用以取代 MD4 算法。摘要算法是单向加密的,也就是说明文通过摘要算法加密之后,是不能解密的。摘要算法的第二个特点密文是固定长度的,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制
的字符串表示)。之所以叫摘要算法,它的算法就是提取明文重要的特征。所以,两个不同的明文,使用了摘要算法之后,有可能他们的密文是一样的,不过这个概率非常的低。
1.1 JavaScript 实现
地址:https://www.autohome.com.cn/changsha/
安装对应的模块
1 | // 在依赖项中添加包: --save |
使用案例
1 | // 引用 crypto-js 加密模块 |
1.2 Python 实现
1 | import hashlib |
总结:MD5
哈希视为字符串,而是将其视为十六进制数, MD5
哈希长度为128位,通常由32
个十六进制数字表示。
2. SHA
简介:全称安全哈希算法,由美国国家安全局(NSA)
所设计,主要适用于数字签名标准里面定义的数字签名算法,SHA
通常指 SHA
家族的五个算法,分别是 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512
,SHA
是比 MD5
更安全一点的摘要算法,MD5
的密文是 32 位,而 SHA-1
是 40 位,版本越强,密文越长,代价是速度越慢。
2.1 JavaScript 实现
1 | // 引用 crypto-js 加密模块 |
2.2 Python 实现
1 | import hashlib |
2.3 sha
系列特征
sha1:23c02b203bd2e2ca19da911f1d270a06d86719fb
sha224:1ffeffcbe2707dc5d1c10df619203c1a3b620c70394b3c4c106d92e6
sha256:c3a845a318cd654749ea4db6f4d5f9cb5c6e5b0cade46d9dc04af46d32049c7c
sha512:af47f324b77a4885748bfc3f0d9b5a846c0153c589852bb3f185ab6e7a600547b818ab994776e8d24584457f9aac84246b0de971584cebbdd96aa1aee6630f9f
总结:根据长度进行定位、主要还是要去JavaScript里面下断点调试分析
3. HMAC
简介:全称散列消息认证码、密钥相关的哈希运算消息认证码,于 1996 年提出,1997 年作为 RFC 2104 被公布,HMAC
加密算法是一种安全的基于加密 Hash
函数和共享密钥的消息认证协议,它要求通信双方共享密钥 key、约定算法、对报文进行 Hash
运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。
参考资料:
3.1 JavaScript 实现
1 | // 引用 crypto-js 加密模块 |
3.2 Python 实现
1 | import hmac |
4. 实战案例
4.1 案例 md5
加密逆向
4.1.1 逆向目标
逆向字段:
code: '9c503a1f852edcc3526ea56976c38edf'
4.1.2 逆向分析
先进行抓包,可以看到有一个签名信息
code
这里推荐下xhr断点调试进行分析、可以发现有一个拦截器
- 数据加密位置,可以在这儿进行分析
4.1.3 python代码模拟
1 | import hashlib,time |
4.2 案例sha256
系列
逆向目标
逆向参数:
sign: "0d2864b1420c42f12de6efeff30bcb4b458157d8177675b8910fa632524604cb"
4.2.1 抓包分析:
- 通过对比,可以发现这个参数每次都会切换
4.2.2 调试加密地地点
- 打开全局搜索
sign
关键字
- 参数加密地点
4.2.3 python代码实现
1 | import urllib3,requests,time,json |
4.3 案例Hmac
系列
4.3.1 逆向目标
- 主页:https://www.qcc.com/
- 接口:https://www.qcc.com/api/datalist/touzilist?keyNo=5dffb644394922f9073544a08f38be9f&pageIndex=2
- 逆向字段:
code: '9c503a1f852edcc3526ea56976c38edf'
4.3.2 逆向分析
可以发现随着请求变化的数据仅有 headers 里的一对键值,且后台也仅对该变动键值做校验。由于其看起来很像 Hash,索性就叫 hashKey:hashValue
。
JavaScript 中的赋值语句通常为 headers[key] = value,搜索 headers[ 即可。
在断点这里可以发现 i 就是key, l就是value,对这两个参数分析即可
1 key值进行分析
1 | key = (0,a.default)(t, e.data) |
1 | arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {} |
解析 && 解析
key运算的结果、可以发现后边进行了分割
1 | (0,o.default)(t + n, (0, a.default)(t)).toLowerCase().substr(8, 20) |
这里面最后会走到hmac
算法进行加密
2 value值进行分析
操作方式同步key的方式、就是参数做了拼接
4.3.3 python操作结果
对称加密
对称加密(加密解密密钥相同):DES、3DES、AES、RC4
简介
对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。
常见算法归纳
DES:56位密钥,由于密钥太短,被逐渐被弃用。
AES:有128位、192位、256位密钥,现在比较流行。密钥长、可以增加破解的难度和成本。
工作模式归纳
ECB模式 全称Electronic Codebook模式,译为电子密码本模式,每个数据块独立进行加/解密
CBC模式 全称Cipher Block Chaining模式,译为密文分组链接模式
- ```
先将明文切分成若干小块,然后每个小块与初始块或者上一段的密文段进行逻辑异或运算后,再用密钥进行加密。第一个明文块与一个叫初始化向量的数据块进行逻辑异或运算1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
- **CFB模式** 全称Cipher FeedBack模式,译为密文反馈模式
- **OFB模式** 全称Output Feedback模式,译为输出反馈模式。
- **CTR模式** 全称Counter模式,译为计数器模式。
**iv:** 防止同样的明文块、加密成同样的密文块
参考:https://zhuanlan.zhihu.com/p/252551522
### 1. DES算法
实例地址:https://bqcm0.cavip1.com/
![image-20221116133758840](https://s1.ax1x.com/2023/07/10/pCR46VU.png)
简介:**DES**是一种分组**加密算法**,他以`64`位为分组对数据加密。`64`位一组的明文从算法的一端 输入,`64`位的密文从另一端输出。**DES**是一个对称算法:加密和解密用的是同一个算法(除 密钥编排不同以外)。
密钥的长度为`56`位(密钥通常表示为`64`位的数,但每个第8位都用作奇偶检验,可以忽 略)。密钥可以是任意的`56`位数,且可以在任意的时候改变。
**DES**算法的入口参数有3个:`Key,Data,Mode`。其中`Key`为8个字节共64位,是**DES**算法 的工作密钥;`Data`也为8个字节64位,是要被加密或解密的数据:Mode为**DES**的工作方式,有 两种:加密或解密。
DES算法的工作过程:若Mode为加密,则用Key对数据Data进行加密,生成Data的密码 形式(64位)作为DES的输出结果;若Mode为解密,则用Key对密码形式的数据Data解密,还 原为Data的明码形式(64位)作为DES的输出结果。
简单地说,算法只不过是加密的一种基本技术,DES基本组建分组是这些技术的一种组合 ,他基于密钥作用于明文,这是众所周知的轮(round)。DES有16轮,这意味着要在明文分 组上16次实施相同的组合技术。
- mode 支持:CBC,CFB,CTR,CTRGladman,ECB,OFB 等。
- padding 支持:ZeroPadding,NoPadding,AnsiX923,Iso10126,Iso97971,Pkcs7 等。
**参考资料:**
- RFC 4772:https://datatracker.ietf.org/doc/rfc4772/
- DES 维基百科:https://en.wikipedia.org/wiki/Data_Encryption_Standard
#### 1.1 JavaScript 实现
`DES`算法的入口参数有3个
+ `key、DATA、Mode、padding`
+ `key`为`7个字节`共56位,是DES算法的工作密钥
+ `Data`为`8个字节`64位,是要被加密或被解密的数据
+ `Mode`为`DES`的工作方式
+ `padding`为填充模式,如果加密后密文长度如果达不到指定整数倍(8个字节,16个字节),填充
```JavaScript
// 引用 crypto-js 加密模块
var CryptoJS = require('crypto-js')
function desEncrypt() {
var key = CryptoJS.enc.Utf8.parse(desKey),
iv = CryptoJS.enc.Utf8.parse(desIv),
srcs = CryptoJS.enc.Utf8.parse(text),
// CBC 加密模式,Pkcs7 填充方式
encrypted = CryptoJS.DES.encrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
function desDecrypt() {
var key = CryptoJS.enc.Utf8.parse(desKey),
iv = CryptoJS.enc.Utf8.parse(desIv),
srcs = encryptedData,
// CBC 加密模式,Pkcs7 填充方式
decrypted = CryptoJS.DES.decrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
var text = "I love Python!" // 待加密对象
var desKey = "6f726c64f2c2057" // 密钥
var desIv = "0123456789ABCDEF" // 初始向量
var encryptedData = desEncrypt()
var decryptedData = desDecrypt()
console.log("加密字符串: ", encryptedData)
console.log("解密字符串: ", decryptedData)
// 加密字符串: +ndbEkWNw2QAfIYQtwC14w==
// 解密字符串: I love Python!
- ```
1.2 Python 实现
1 | pip install pyDes |
1 | import binascii |
总结:https://www.processon.com/view/link/6374f0e10e3e742ce7bd597b
1.3 实操练习1
地址:http://www.91118.com/Passport/Account/Login
1.4 实操练习2
1.3.1 逆向目标
首页:https://www.endata.com.cn/BoxOffice/BO/Month/oneMonth.html
数据:https://www.endata.com.cn/API/GetData.ashx
逆向:加密数据
1.3.2 逆向分析
- 使用xhr断点数据地址,进行单步调试
- 调试对应的数据
总结:可以看到他是对数据用webInstace.shell
进行了解密
2. AES算法
环境安装
1 | pip install pycryptodome -i pip源 |
2.1 算法简介
简介:全称高级加密标准(英文名称:Advanced Encryption Standard),在密码学中又称 Rijndael 加密法,由美国国家标准与技术研究院 (NIST)于 2001 年发布,并在 2002 年成为有效的标准,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用,它本身只有一个密钥,即用来实现加密,也用于解密。
- mode 支持:CBC,CFB,CTR,CTRGladman,ECB,OFB 等。
- padding 支持:ZeroPadding,NoPadding,AnsiX923,Iso10126,Iso97971,Pkcs7 等。
参考资料:
- RFC 3268:https://datatracker.ietf.org/doc/rfc3268/
- AES 维基百科:https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
参数定义:
- key length(密钥位数,密码长度)
AES128,AES192,AES256(128 位、192 位或 256 位)
- key (密钥,密码)key指的就是密码了,
AES128
就是128位
的,如果位数不够,某些库可能会自动填充到128
。 - IV (向量)IV称为初始向量,不同的IV加密后的字符串是不同的,加密和解密需要相同的IV。
- mode (加密模式)AES分为几种模式,比如ECB,CBC,CFB等等,这些模式除了ECB由于没有使用IV而不太安全,其他模式差别并没有太明显。
- padding (填充方式)对于加密解密两端需要使用同一的PADDING模式,大部分PADDING模式为
PKCS5, PKCS7, NOPADDING
。
加密原理:
AES加密算法采用分组密码体制,每个分组数据的长度为128位16个字节
,密钥长度可以是128位16个字节
、192位或256位
,一共有四种加密模式,我们通常采用需要初始向量IV的CBC模式,初始向量的长度也是128位16个字节
。
2.2 JavaScript 实现
类似网站:https://www.dns.com/login.html
1 | // 引用 crypto-js 加密模块 |
2.3 实际案例
2.3.1 逆向目标
目标:建筑市场数据采集
接口:https://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list
逆向参数:
data加密
2.3.2 抓包分析
1、抓包处理
根据抓包结果可以分析,此接口数据是16
进制编码的数据,如果需要采集,就需要使用算法进行分析
2、对于数据加密的网站,先看启动器分析JS
文件,然后全局搜索json.parse(
,一般后台返回的加密数据,会进行类型转换。
3、数据确认
从这里可以发现t.data
是后台返回的数据,h
是JavaScript
里面的方法,数据经过h
变成了明文,所以需要先分析h
方法
4、h
函数判断
经过查看分析,h
方法是一个算法 ,可以先使用标准算法进行尝试处理
2.3.3 逆向结果
1 | var CryptoJS = require('crypto-js'); |
非对称加密
1 非对称简介
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)
和私有密钥(privatekey)
。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
- 常见非对称加密算法
RSA
、DSA
。 - 非对称加密算法私钥由数据接收方持有,不会在网络上传递,保证了密钥的安全。
- 非对称加密算法通常比对称加密算法计算复杂,性能消耗高。
- 非对称加密算法可用于数字签名。
注意:
- 使用时都是使用公钥加密使用私钥解密,公钥可以公开,私钥自己保留。
- 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使加密解密速度慢于对称加密
2 非对称特征
常见JavaScript调试算法
- 搜索关键词
new JSEncrypt()
,JSEncrypt
等,一般会使用JSEncrypt
库,会有 new 一个实例对象的操作; - 搜索关键词
setPublicKey
、setKey
、setPrivateKey
、getPublicKey
等,一般实现的代码里都含有设置密钥的过程。
RSA 的私钥、公钥、明文、密文长度也有一定对应关系,也可以从这方面初步判断:
私钥长度 | 公钥长度 | 明文长度 | 密文长度 |
---|---|---|---|
428 | 128 | 1~53 | 88 |
812 | 216 | 1~117 | 172 |
1588 | 392 | 1~245 | 344 |
2.1 JavaScript 实现
1 | // npm install node-rsa --save |
2.2 Python 实现
模块:rsa
1 | # -*- coding: utf-8 -*- |
3 案例实战
目标:房天下账号密码登录
逆向参数:
Form Data:
1
pwd: 044b527dba64d1e82657668beae1d61e4d86643d231792c78d5c538461a146b01c8e28d98b14915a11758deb60
3.1 抓包分析
随便输入一个账号密码,点击登陆,抓包定位到登录接口为 https://passport.fang.com/login.api ,POST 请求,Form Data
里,密码 pwd
被加密处理了。
3.2 参数逆向
加密参数只有一个 pwd,直接全局搜索,出现一个 loginbypassword.js
,很明显就是加密的 JS
,这个JS
贴心的写上了中文注释,直接来到登录模块,埋下断点:
关键代码:
1 | uid: that.username.val(), |
这里主要用到了 encryptedString
这个函数和 key_to_encode
参数,鼠标放到 encryptedString
函数上面,可以看到这个函数实际上是在一个叫做 RSA.min.js
的加密 JS 文件里,很明显的RSA
加密,我们跟进这个函数,直接将所有加密函数剥离下来进行本地调试即可:
而 key_to_encode
这个参数是可以直接在首页搜到,可以看到是向 RSAKeyPair
函数传入参数得到的:
根据以上分析,我们可以把加密的主要步骤重写并封装成一个函数:
1 | function getEncryptedPassword(pwd, n, i, t) { |
其中 pwd
就是明文密码,n,i,t
是用来获取 key_to_encode
的参数,它们三个的值都可以在主页中找到。
3.3 JS代码
setMaxDigits()
貌似是生成密文的最大位数, 计算公式n ** 2 / 16
。其中n为密钥长度
1 | function setMaxDigits(n) {} |
3.4 python代码
1 | #!/usr/bin/env python3 |
4. 案例实战
说明
1 | 本教程为教学使用,不承担任何风险,请自觉遵守法律法规 -- 微流云平台 |
4.1 逆向参数
- 该案例是多层嵌套加密
1 | 地址:https://www.wei-liu.com/user/login.html |
4.2 逆向分析
点击登录会加载2个地址
地址1:https://api.wei-liu.com/api/v1/Token/code
地址2:https://api.wei-liu.com/api/v1/Token
总结:地址2里面有携带参数 地址1返回公钥
和item2
参数
4.3 JavaScript分析
总结:从这里可以看出密码是属于加密的
下XHR
断点分析https://api.wei-liu.com/api/v1/Token
,可以在以下位置发现参数
4.4 密钥分析
- 拉动滑块,获取后台公钥
item1
和带有时间的item2
4.5 算法还原
4.5.1 用python模拟请求测试
1 | def get_miyue(): |
4.5.2 JavaScript测试代码
1 | // 这里的jsencrypt.js是原网站自定义的脚本 |
4.5.3 密码获取
1 | js_code = open('psd.js','r').read() |
SM国秘系列
说明
1 | 本教程仅供学习交流使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,请各学员自觉遵守相关法律法规。 |
1 算法简介
事实上从 2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括 SM1、SM2、SM3 、SM4、SM7、SM9、ZUC
(祖冲之加密算法)等,SM
代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1
和 SM7
的算法不公开,其余算法都已成为 ISO/IEC
国际标准。
在这些国产加密算法中,SM2、SM3、SM4
三种加密算法是比较常见的,在爬取部分网站时,也可能会遇到这些算法,所以作为爬虫工程师是有必要了解一下这些算法的,如下图所示某网站就使用了 SM2
和 SM4
加密算法:
1.1 算法分类
算法名称 | 算法类别 | 应用领域 | 特点 |
---|---|---|---|
SM1 | 对称(分组)加密算法 | 芯片 | 分组长度、密钥长度均为 128 比特 |
SM2 | 非对称(基于椭圆曲线 ECC)加密算法 | 数据加密 | ECC 椭圆曲线密码机制 256 位,相比 RSA 处理速度快,消耗更少 |
SM3 | 散列(hash)函数算法 | 完整性校验 | 安全性及效率与 SHA-256 相当,压缩函数更复杂 |
SM4 | 对称(分组)加密算法 | 数据加密和局域网产品 | 分组长度、密钥长度均为 128 比特,计算轮数多 |
SM7 | 对称(分组)加密算法 | 非接触式 IC 卡 | 分组长度、密钥长度均为 128 比特 |
SM9 | 标识加密算法(IBE) | 端对端离线安全通讯 | 加密强度等同于 3072 位密钥的 RSA 加密算法 |
ZUC | 对称(序列)加密算法 | 移动通信 4G 网络 | 流密码 |
1.1.1 SM2
椭圆曲线公钥加密算法
SM2
为椭圆曲线(ECC
)公钥加密算法,非对称加密,SM2
算法和 RSA
算法都是公钥加密算法,SM2
算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换 RSA
算法,在不少官方网站会见到此类加密算法。我国学者对椭圆曲线密码的研究从 20 世纪 80 年代开始,目前已取得不少成果,SM2
椭圆曲线公钥密码算法比 RSA
算法有以下优势:
SM2 | RSA | |
---|---|---|
安全性 | 256 位 SM2 强度已超过 RSA-2048 | 一般 |
算法结构 | 基本椭圆曲线(ECC) | 基于特殊的可逆模幂运算 |
计算复杂度 | 完全指数级 | 亚指数级 |
存储空间(密钥长度) | 192-256 bit | 2048-4096 bit |
秘钥生成速度 | 较 RSA 算法快百倍以上 | 慢 |
解密加密速度 | 较快 | 一般 |
1.1.2SM4
分组加密算法
SM4
为无线局域网标准的分组加密算法,对称加密,用于替代 DES/AES
等国际算法,SM4
算法与 AES
算法具有相同的密钥长度和分组长度,均为 128 位,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。加密算法与密钥扩展算法都采用 32 轮非线性迭代结构,解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
SM4 | DES | AES | |
---|---|---|---|
计算轮数 | 32 | 16(3DES 为 16*3) | 10/12/14 |
密码部件 | S 盒、非线性变换、线性变换、合成变换 | 标准算术和逻辑运算、先替换后置换,不含线性变换 | S 盒、行移位变换、列混合变换、圈密钥加变换(AddRoundKey) |
2 算法还原
2.1 JavaScript还原
在 JavaScript 中已有比较成熟的实现库,这里推荐 sm-crypto[4]
,目前支持 SM2、SM3 和 SM4
,需要注意的是,SM2 非对称加密的结果由 C1、C2、C3
三部分组成,其中 C1
是生成随机数的计算出的椭圆曲线点,C2
是密文数据,C3
是 SM3
的摘要值,最开始的国密标准的结果是按 C1C2C3
顺序的,新标准的是按 C1C3C2
顺序存放的,sm-crypto
支持设置 cipherMode
,也就是 C1C2C3
的排列顺序。
以 SM2
算法为例,实现如下(其他算法和详细用法可参考其官方文档):
SM2
加密(encrypt)和解密(decrypt):
1 | // npm install sm-crypto --save |
2.2 python
还原
在 Python 里面并没有比较官方的库来实现国密算法,这里仅列出了其中两个较为完善的第三方库,需要注意的是,SM1 和 SM7
算法不公开,目前大多库仅实现了 SM2、SM3、SM4
三种密算法。
若要使用 SM9
算法,可下载 gmssl-python
源码手动安装。
1 | pip install gmssl |
2.2.1 python实现功能
1 | from gmssl import sm2 |
3 实战讲解
说明: 此案例只为技术探讨
3.1 逆向目标
- 目标: 嘿嘿嘿
- 主页:https://fuwu.nhsa.gov.cn/nationalHallSt/#/search/medical?code=90000&flag=false&gbFlag=true
- 接口:https://fuwu.nhsa.gov.cn/ebus/fuwu/api/nthl/api/CommQuery/queryFixedHospital
- 逆向参数:
encData signData
3.2 逆向过程
3.2.1 参数分析
1 | { |
来到公共查询页面,点击翻页,就可以看到一个 POST
请求,Request Payload
的参数部分是加密的,主要是 appCode
、encData
和 signData
参数,同样返回的数据也有这些参数,其加密解密方法是一样的,其中 encType
和 signType
分别为 SM4
和 SM2
,所以大概率这是国密算法了
此外请求头还有 x-tif-nonce
和 x-tif-signature
参数
1 | x-tif-signature: 1d25fd180718ba4218f55f558a666b6c26acb1d14feaa9c109c11d0435d99ba8 |
3.2.2 JavaScript分析
直接全局搜索 encData
或 signData
,搜索结果仅在 app.1691****.js
有,非常明显,上面还有设置 header
的地方,所有参数都在这里,埋下断点,可以看到这里就是加密的地方,如下图所示:
头部参数处理
- 解决
x-tif-nonce
和x-tif-signature
1 | 链接:https://pan.baidu.com/s/1pZ9lGbCtDGj8JKlqtKjAsg |
encData
参数处理
signdata
处理
4 实践
地址:https://idaas.yundasys.com:10443/frontend/login#/login
参数:passowrd