设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 106|回复: 13

详解淘宝H5 sign加密算法

[复制链接]

4

主题

44

回帖

178

积分

注册会员

积分
178
发表于 2024-4-20 10:34:14 | 显示全部楼层 |阅读模式
淘宝对于h5的访问采用了和客户端不同的方式,由于在h5的js代码中保存appsercret具有较高的风险,mtop采用了随机分配令牌的方式,为每个访问端分配一个token,保存在用户的cookie中,通过cookie带回服务端分配的token, 客户端利用分配的token对请求的URL参数生成摘要值sign,MTOP利用这个摘用值和cookie中的token来防止URL篡改。
流程

当本地cookie中的token为空时(通常是第一次访问),mtop会收到”FAIL_SYS_TOKEN_EXOIRED:: 令牌过期“这个错误应答,同时mtop会生成token写入cookie中(response.cookies);
第二次请求时,js通过读取cookie中的token值,按照约定的算法生成sign, sign在mtop的请求中带上,mtop通过cookie中和token用同样的方式计算出sign,与请求的sign进行比较,检查通过将返回api的应答,失败提示“FAIL_SYS_ILLEGAL_ACCESS:: 非法请求”;
cookie中的token是有时效性的,遇到token失效时,将收到应答"FAIL_SYS_TOKEN_EXOIRED:: 令牌过期", 同时会写入新的token,js利用新的token重新计算sign并重发请求;
关于cookie中的token的自我检查,由于token在cookie中是明文的,可能会被仿冒,在输出的cookie中包含一个用非对称密钥的公钥加密后的token, MTOP在每次请求时会先检查cookie中的token是否是由服务端分配出去的(利用加密后的token和私钥还原token,与回传的明文token比较)
sign 生成
关于sign的生成公式:
  1. md5Hex(token&t&appKey&data)
复制代码
如:md5Hex("30dc68e5b4cf40ebd02fb05673c7e3b7&1572522062317&12345678&{"itemNumId":"1502111132496"}")
sign=4c1e7b6853fa7a5e1b8f7066ee22932f
实现代码:
  1. public static String calcSignature(String token, String timestamp, String appKey, String data) {
  2.         return DigestUtils.md5Hex(StringUtils.trimToEmpty(token) + "&"
  3.                 + timestamp + "&" + appKey + "&" + data);
  4.     }

  5.     public static void main(String[] args) {
  6.         String token="30dc68e5b4cf40ebd02fb05673c7e3b7";
  7.         String timestamp="1572522062317";
  8.         String sign = calcSignature(token, timestamp, "12345678", "{"itemNumId":"1502111132496"}");
  9.         System.out.println(sign);
  10.     }
复制代码
token
m_h5tk: 格式为 明文token_expireTime, 从response.cookies处获取,如: 30dc68e5b4cf40ebd02fb05673c7e3b7_1572522062317
token就是 30dc68e5b4cf40ebd02fb05673c7e3b7
失效时间是 1572522062317
可封装在一个类中负责存储token
  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. @Builder
  5. public class Credentials implements Comparable<Credentials> {
  6.     private String _m_h5_tk;
  7.     private String _m_h5_tk_enc;

  8.     private static final int OFFSET = 60000;

  9.     public String getToken() {
  10.         return StringUtils.isEmpty(_m_h5_tk) ? null : _m_h5_tk.substring(0, _m_h5_tk.indexOf("_"));
  11.     }

  12.     public long getExpireTimestamp() {
  13.         long t = new Date().getTime() - OFFSET;
  14.         if (StringUtils.isEmpty(_m_h5_tk) || StringUtils.isEmpty(_m_h5_tk_enc)) {
  15.             return t;
  16.         }
  17.         try {
  18.             return Long.parseLong(_m_h5_tk.substring(_m_h5_tk.indexOf("_") + 1));
  19.         } catch (NumberFormatException e) {
  20.             return t;
  21.         }
  22.     }

  23.     public boolean isExpired() {
  24.         if (StringUtils.isEmpty(_m_h5_tk) || StringUtils.isEmpty(_m_h5_tk_enc)) {
  25.             return true;
  26.         }
  27.         return new Date().getTime() > getExpireTimestamp();
  28.     }

  29.     @Override
  30.     public int compareTo(Credentials o) {
  31.         return Long.compare(o.getExpireTimestamp(), this.getExpireTimestamp());
  32.     }
  33. }
复制代码
t
很简单,即时间戳 通过 new Date().getTime() 获得
appKey
固定数值 通过抓包工具在请求参数中可获得,参数名 appKey
data
提交的参数 通过抓包工具在请求参数中可获得 通常是一个JSON字符串
到此这篇关于详解淘宝H5 sign加密算法的文章就介绍到这了,更多相关淘宝H5 sign加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

0

主题

39

回帖

79

积分

注册会员

积分
79
发表于 2024-4-22 21:32:31 | 显示全部楼层
友善的讨论氛围是非常重要的。

0

主题

45

回帖

91

积分

注册会员

积分
91
发表于 2024-4-27 11:04:04 | 显示全部楼层
已测试,非常不错

2

主题

47

回帖

135

积分

注册会员

积分
135
发表于 2024-6-3 23:22:44 | 显示全部楼层
666666666666666666

1

主题

58

回帖

140

积分

注册会员

积分
140
发表于 2024-6-9 14:59:30 | 显示全部楼层
嘎嘎嘎嘎嘎嘎嘎

1

主题

59

回帖

141

积分

注册会员

积分
141
发表于 2024-7-18 06:44:28 | 显示全部楼层
同意你的观点,我们有共鸣。

1

主题

49

回帖

121

积分

注册会员

积分
121
发表于 2024-7-21 10:47:14 | 显示全部楼层
友善的讨论氛围是非常重要的。
  • 打卡等级:偶尔看看
  • 打卡总天数:10
  • 打卡月天数:0
  • 打卡总奖励:180
  • 最近打卡:2024-06-20 09:02:38

9

主题

80

回帖

605

积分

高级会员

积分
605

推广达人宣传达人热心会员付费会员

发表于 2024-7-27 11:56:15 | 显示全部楼层
我不太确定,可能需要再确认一下。

1

主题

42

回帖

109

积分

等待验证会员

积分
109
发表于 2024-8-2 20:21:53 | 显示全部楼层
666666666666666666

2

主题

47

回帖

135

积分

注册会员

积分
135
发表于 2024-8-22 20:10:48 | 显示全部楼层
感谢分享,受益匪浅!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-15 14:48 , Processed in 0.092246 second(s), 27 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

快速回复 返回顶部 返回列表