一、前言

token加密原理分析主要参考:http://www.360doc.com/content/19/1108/09/13474884_871818718.shtml  由于在网上搜到的都是使用python来解码的,这里加上使用java来加密解密美团外卖店铺列表等接口的token参数和X-FOR-WITH

二、代码示例

1.token加密解密

(1) 取出token值

(2)代码解密

使用代码解密得出

其中token解密出的数据中有sign这一项,使用同样的方法解密,即可得出sign是由什么参数加密而来。

加密和解密代码如下:

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.binary.Base64;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.InflaterOutputStream;public class TokenHelp {public static void main(String[] args) throws Exception{String token="eJx9kuuOojAUgN+FhP2jESigYGImIIjAeAdH3Ww2aBEqN4UCwmbffTv3zWSzSdNzztfTpN9Jf1G5Cakhx3IDlutSlZ9TQ4rrsb0+1aVwQU5ESRhIgjAY8GDQpU6fTOR4GbBClzrmW40afhcFtgtE9sczWJP6E3xmQCDrucMkDVSI8bUYMkwo9moPJR7qJT7CpZf2TlnCvCImQSn070yE0iDK0uAh9SoUeNh3mqs/kjn22xnlBR4TEmR5Y8IXVvinLIVfIEY49ke0PqBVnZZ0WpdphaflCTH9/0viLEDpwznLT/4I56X/7eidop9lHo9e7tG8QoMJWf+8TfgrJMmrC0nebWh+8rcPzWvkoTTof3H64F+9Pg5e3EhFA5H4AZEYAlF63oglEIknEIkpGX3ikNGTGL1F7y3i93pGfgAZSYGClGS+1cSRjqugVVbhUn7UckGd40Cyq9i9ra2ND679dSAUhZmdGytImDPkoqjKMIQVTGEiX8bqghEKczpH85CvtZ2r8HU/twxBXQi4BPx4lavt1K3jLX9g+ovbZMZNVve2rBzbspssq3dLw3DF6yop5Ylg2dqBi098YGzchSk5AHUqcd2Oi1yMwKbdINa+zLQnZb+dgcGBt6YoaD3FFw75rF2pxzio3WqxTdjxbdmuw6Nu80XHx1ttwV7QyQFM3cLsyTEaL2yVs2AbS9xC2Flru7OkYFUXph0z3OD9qoW3I2TaR+Yu1rMDf9s3DLzDzX2vNxuRNU2urNlD3582k3A953ZOYVX9amY/FigvJSN5cmXDvahyR9kpTnxxR9TvP6gPHhs=";String result = decompressData(token);System.out.println(result);JSONObject jsonObject = JSONObject.parseObject(result);String sign = jsonObject.get("sign").toString();String params = decompressData(sign);System.out.println(params);}/*** zlib压缩+base64*/public static String compressData(String data) {ByteArrayOutputStream bos;DeflaterOutputStream zos;try {bos = new ByteArrayOutputStream();zos = new DeflaterOutputStream(bos);zos.write(data.getBytes());zos.close();return new String(Base64.encodeBase64(bos.toByteArray()));} catch (IOException e) {e.printStackTrace();}return null;}/*** zlib解压+base64*/public static String decompressData(String encdata) {try {ByteArrayOutputStream bos = new ByteArrayOutputStream();InflaterOutputStream zos = new InflaterOutputStream(bos);zos.write(Base64.decodeBase64(encdata.getBytes()));zos.close();return new String(bos.toByteArray());} catch (Exception ex) {ex.printStackTrace();}return null;}

2.X-FOR-WITH

加密分析依然参考上面的分析原理

加解密代码如下:

package com.tang.crawler.utils;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class AESEncryptionUtil {public static String key="jvzempodf8f9anyt";/*** 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。* 偏移量必须为16位* @param sKey* @param ivParameter* @param sSrc* @return*/public static String encrypt(String sKey, String ivParameter, byte[] sSrc) {try {return new BASE64Encoder().encode(getCipher(sKey, ivParameter, Cipher.ENCRYPT_MODE).doFinal(sSrc));//此处使用BASE64做转码。} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (InvalidAlgorithmParameterException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}return null;}/*** 解密* @param sKey key* @param ivParameter 偏移量* @param sSrc* @return*/public static byte[] decrypt(String sKey, String ivParameter, byte[] sSrc) {try {return getCipher(sKey, ivParameter, Cipher.DECRYPT_MODE).doFinal(new BASE64Decoder().decodeBuffer(new String(sSrc)));} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidAlgorithmParameterException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();}return null;}/*** 加密算法* @param seed key* @param ivParameter 偏移量* @param encryptMode 模式* @return* @throws UnsupportedEncodingException* @throws NoSuchPaddingException* @throws NoSuchAlgorithmException* @throws InvalidAlgorithmParameterException* @throws InvalidKeyException*/private static Cipher getCipher(String seed, String ivParameter, int encryptMode)throws UnsupportedEncodingException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException {byte[] raw = seed.getBytes("ASCII");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());cipher.init(encryptMode, skeySpec, iv);return cipher;}public static void main(String[] args) throws Exception{String text="Q8/eNHqW/CHdiHWHwSVXawZ3tNAA6f/DPMyA02ix0kTFnJ126UbyIO/5pbLzl9hw3+naadrcvTeDN6gMCMzwtguvA2ByJdFeRtpEUj58RDKIFjvt1G22vaVW5dU5kfLp9YDT07gNnWSny2WCrTjoECfD7LEegh09Cudc5G8fro/zL+Uv4LaSyEyazlFP9nxTRKap7yxnhR8uPFP/O3HVlw==";byte[] decrypt = decrypt(key, key, text.getBytes("UTF-8"));String result = new String(decrypt);System.out.println(result);String encrypt = encrypt(key, key, result.getBytes("UTF-8"));System.out.println(encrypt);}
}

美团外卖token解密(Java版)相关推荐

  1. 微信开放平台分账功能实战(Java版)

    ####近期为了接入微信支付以及微信分账等功能,开发了微信类的一系列接口,下面就本着开发的目标,再次记录回顾一下微信开放的步骤.. ####目标:通过微信支付,实现分账到运营商的功能. ####根据实 ...

  2. nodejs调用建行互联网银企被扫支付接口Java版加解密Demo

    环境:nodejs+eclipse+child_process模块+建行互联网银企被扫支付接口文档V2.2.6 总体步骤如下: 1.将建行Java版加密Demo打包成jar包:CCBParam.jar ...

  3. 【新闻背后】美团外卖商家Android版强杀竞争对手App

    下午,一位程序员小伙伴在知乎上发了一则帖子技术揭幕贴,题目也是广为人知的知乎体「如何评价美团外卖强杀竞争对手的 App 进程?」 简而言之,该程序员在反编译完美团外卖商家Android版后,发现其中有 ...

  4. java 美团 订单推送,记一次美团外卖推送报文丢失

    记一次美团外卖推送报文丢失1.环境介绍2.问题追踪step1 查推送日志step2 查日志文件step3 追踪代码step4 追踪代码调用链3.问题重现step1 在spring cloud 启动的时 ...

  5. 美团外卖商家版多开工具

    美团外卖商家版多开工具官方版是一款简单易用的美团外卖多开工具.美团外卖商家版多开工具官方版页面美观大方,操作简便,支持同一个电脑开多个美团店铺同时接单打印和美团连锁店铺账号的订单多开功能,能够帮助美团 ...

  6. Java项目:手机WAP版外卖订餐系统(java+SSM+jsp+jquery+mysql)

    源码获取:博客首页 "资源" 里下载! jsp+ssm框架实现手机WAP版外卖订餐系统 项目介绍 这是一款由jsp+ssm框架(spring.springMVC.mybaits)实 ...

  7. Java版 凯撒密码 加密、解密、暴力破解

    Java版 凯撒密码 加密.解密.暴力破解 用Java实现凯撒密码的 '加密' 和 '解密' 工作 代码实现如下: 代码片 package com.hellow.demo;import java.ut ...

  8. 美团外卖Flutter动态化实践

    此文转载自:https://my.oschina.net/meituantech/blog/4325381 LiteOS Studio图形化调测能力,物联网打工人必备!>>> 一.前 ...

  9. 万字长文,请耐心看完!美团外卖Flutter动态化实践,5w+人已阅

    作者:尚先 杨超 松涛 原文链接:https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651752194&idx=1& ...

最新文章

  1. 在Linux 6上使用UDEV解决RAC ASM存储设备名问题
  2. Scala语言将加入宏指令
  3. 远控免杀专题 13----zirikatu免杀
  4. 多线程导出excel高并发_大牛带你深入java多线程与高并发:JMH与Disruptor,确定能学会?...
  5. Day05 egrep正则表达式sed
  6. 【报告分享】线上汉服消费洞察报告.pdf(附下载链接)
  7. -------------初识----------动态规划。--------------------------------------------
  8. java 打破封装_继承打破了封装性
  9. css3中的perspective与perspective-origin
  10. [ZPG TEST 110] 多边形个数【DP】
  11. 制作一个简单HTML个人网页网页(HTML+CSS)
  12. 微信外卖点餐系统开发教程
  13. PyTorch安装及试用 基于Anaconda3
  14. MySql union 连接使用
  15. BZOJ 3786: 星系探索 ETT
  16. 亚马逊aws服务取消_Amazon S3 – AWS简单存储服务
  17. 如何选择SCI期刊并能顺利发表
  18. 硬货来了!轻松掌握 MongDB 流式聚合操作
  19. 龙芯平台安装Visual Studio Code(VSCode)
  20. 基于翻译的模型-TransE,TransH,TransR,TransD

热门文章

  1. OpenLDAP配置坎坷路
  2. 曾经社交王者人人为何如今失魂落魄
  3. 【ESP32_8266_MQTT篇】
  4. 第二章软件测试基础知识
  5. i7 1165g7和i7 9750h 哪个好
  6. 【Labview机器视觉】- USB摄像头识别一维码(条形码)- 学习记录
  7. 【Word】长文档排版
  8. 子网掩码是什么?子网掩码及其CIDR斜杠表示法
  9. 疯狂的麦克斯java游戏_疯狂的麦克斯
  10. C++ - STL标准库