当前位置: 首页 > 编程日记 > 正文

连信的会话加密密钥协商过程

点击上方蓝字[协议分析与还原]关注我们


 介绍连信会话加密密钥的协商过程。

公号内之前已经对协议的框架和协议内的数据格式进行了介绍,有需要可以回顾下:

连信协议整体框架

连信的protobuf数据格式

本文对连信的会话加密密钥协商过程进行介绍。

连信使用过程中,包括长连接和短链接内的数据,均使用AES CBC加密,而加密的密钥key和向量iv,则是在登录即打开APP时进行协商,从服务器下发。

连信登录过程分为两种,第一种为之前在当前手机上没有登录过,使用手机号进行登录,第二种为在当前手机上已经登录,保存有验证信息。

01

auth_login登录

第一种在验证码之后,使用账号进行登录验证,iphone版使用的url是:

https://short.lianxinapp.com/webuic/auth/v13/auth_login.json

报文类似这样:

请求部分的Content-Encrypted-ZX的值为1表示请求体加密,Content-CKey-Version表示RSA加密密钥的版本,Content-CKey内的内容为RSA加密的AES ECB密钥,请求体使用这个key加密。

请求体内的内容如下:

    dfp={"teamid":"","isJailbreaking":False,"channel":channel,#"appstore","simulator":"0","dylib":"","bundleid":bundleid,#"com.zenmen.palmchat","resolution":resolution,#"640-1136","ip":localip#"192.167.2.88"}dfpstr=json.dumps(dfp)payload={'channelId':channel,#'appstore','idfa': idfa,'sdid':sdid,'deviceId': dhid,'hashKey': hashKey,'appList':'{}','platform': Resource,#'iphone','versionCode':vcode,#'200404',"did": dhid,"idfv": idfv,"authKey": authKey,"dfp":dfpstr}

Content-CKey内数据的RSA加密密钥根据Content-CKey-Version版本值不同而不同,其中一个版本为:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhCalnroo3exCtNnDnk66dCGCiq/WVjYdwmlyPCubzRBD+0MZbQUpaZzWqguQ1XAxgFai/Qod+L0ALS7UptvXhCHxAY+Wh6mco876S9RDpMUcZvj0Ma1UK0o/StNvrJOOyZWRWQhXir/T93rkavKVu/VJqJFFOcq4sz9WqhjeDOwIDAQAB

当然,url内的版本vxx的值在RSA密钥不同时也有差异。

响应体解密后内容包括一些服务器上的信息和后续加密用的key和iv:

"{\n  \"resultCode\":0,\n  \"data\":{\n    \"uid\":\"490xxx92\",\n    \"skey\":\"kp1bppYcF1yA0W6Z\",\n    \"iv\":\"B5le192ZOPZZ2chq\",\n    \"sessionId\":\"34daxxx7e56b10fca16993\",\n    \t\"refreshKey\":\"iMvq3kwJXbQh0Wlt\",\n    \"account\":\"\",\n      \t\"nickname\":\"\u53e4\u53e4\u602a\u602a\",\n      \t\"pyInitial\":\"GGGG\",\n      \t\"pyQuanPin\":\"GuGuGuaiGuai\",\n    \"headImgUrl\":\"https://avatar.cdn.lianxinapp.com/avatar2/u/c/2020/5/1/e/a/1cbc07gefxxx7a63205f38f-q9nbqj.crop\",\n    \"headIconUrl\":\"https://avatar.cdn.lianxinapp.com/avatar2/u/c/2020/5/1/e/a/1cbc0xxx5af48e08f9357a63205f38f-q9nbqj_small.crop\",\n      \t\"signature\":\"\u5f53\u7136\",\n    \"ic\":\"1\",\n    \"privacyConfig\":\"0\",\n    \"phone\":\"438xxxx4\",\n    \"sex\":0,\n    \"country\":\"\",\n    \"province\":\"\",\n    \"city\":\"\",\n    \"birthday\":\"\",\n    \t\"age\":0,\n\t    \"hobby\":\"\",\n    \"email\":\"\",\n    \"syncKey\":\"1\",\n    \"version\":\"17030009\",\n    \"newUser\":1,\n    \"hintStyle\":0,\n    \"showUserStyle\":0,\n    \"exid\":\"V1qYdxxx-jn8gv\"\n  }\n}"

02

token登录

第二种在每次打开APP时进行登录验证,iphone版使用的url是:

https://short.lianxinapp.com/token/v10/ak

报文类似这样:

和auth_login登录一样,请求部分的Content-Encrypted-ZX的值为1表示请求体加密,Content-CKey-Version表示RSA加密密钥的版本,Content-CKey内的内容为RSA加密的AES ECB密钥,请求体使用这个key加密。

请求体内的内容如下:

    payload={'ckey':aesecbkey,'sessionId': sessionId,'sdid':sdid,'refreshKey': refreshKey}

Content-CKey内数据的RSA加密密钥与auth_login相同。

url内的版本vxx的值在RSA密钥不同时也有差异。

响应体解密后内容包括后续加密用的key和iv:

"{\"key\":\"LlGQmBfQurP1X13p\",\"iv\":\"uJt76oWLOlrvKV7z\",\"sync\":0,\"exid\":\"5d1kNyyPPxxxx1-JgG55\",\"resultCode\":0}"

这个过程相当于更新了一次key和iv,后续的数据加密均使用这对key和iv进行。

03

结束

密钥的协商过程就这样子,关键是找到RSA公钥,文中的公钥是连信ios版内的测试版公钥,为避免麻烦,它的正式公钥就不放了。

别忘点“在看”、“赞”和“分享”

新的规则,及时收推文要先给公号星标

别忘了星标一下,不然就错过了

长按进行关注,时刻进行交流。

相关文章:

6、UmbracoNewsSite:添加新闻分类

上一篇做了一个简单的首页,在导航条上添加了几个新闻板块,接下来我们就添加这几个新闻板块的页面。 开始我们还是需要创建Document Types用来展示新闻列表。我们先做好规划,新闻列表只需要把新闻标题和图片展示出来就可以了,。  …

02-CoreData 的增删改查

CoreData 的增删改查 基本的增删改查的操作 1 数据库的创建 - (void)createDB {// 1.1 创建路径NSURL *modelURL [[NSBundle mainBundle] URLForResource:"AT_CoreDataDemo1" withExtension:"momd"];// 1.2 根据模型文件路径创建模型对象NSManagedObje…

Lemon开源OA

http://www.mossle.com/index.html 转载于:https://www.cnblogs.com/gzmg/p/3770882.html

UC浏览器代理流量解密

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 解密uc浏览器的安全代理流量,看看是不是真安全。”作为一个从上古网络时代过来的人,一定对UC浏览器有深刻印象,它的流量透明代理功能,就是现在的云加速功能,使用UC的服务…

JAVA07 接口与继承

一 动手实验:继承条件下的构造方法调用 1)源代码 1 public class TestInherits {2 3 public static void main(String[] args) {4 // TODO Auto-generated method stub5 6 Child c new Child();7 }8 9 } 10 11 class GrandPa…

学习-现代交换原理与通信技术

帮助学习细化。。。 首先,这书真是难读,像个词典嘛似乎《现代交换原理与通信技术》卞佳丽 北邮 呵呵 呵了个呵 不过词典也有词典的好处 第三章,数字程控电话交换与通信网络 1. 控制子系统 与 话路子系统 前者在于控制,后者在于数…

03-NSPredicate谓词

NSPredicate 谓词 在查询数据的过程中&#xff0c;给NSFetchRequest设置一个过滤条件&#xff0c;不需要讲所有的托管对象加载到内存中去。这样的话就会节省内存和加快查找速度。 一 运算符 1 比较运算符 、< 、 、> 、< 、! 比如说age>80 NSPredicate *pre […

小兵别嚣张,签名算法分析

点击上方↑↑↑蓝字[协议分析与还原]关注我们“分析unity3d游戏小兵别嚣张的签名算法。”不久前&#xff0c;写了个unity3d的引子&#xff0c;介绍了使用工具从unity3d游戏中提取出各种资源和算法&#xff1a;unity3d游戏IL2CPP相关算法简单分析不过内容很少&#xff0c;今天介…

NOIP模拟题——B

【题目描述】我们要从n种食物选m个出来&#xff0c;安排一个顺序吃掉它&#xff08;们&#xff09;&#xff0c;每种食物有个美味值ai&#xff0c;然后我们有k个规则&#xff0c;每个规则有 xi, yi 和 ci三个数&#xff0c;如果吃完第xi种食物接下来马上吃第yi种食物&#xff0…

Maven使用常用命令

> mvn clean删除target文件夹> mvn clean test编译测试代码&#xff0c;默认被放到target/test-classes文件夹下面> mvn clean compile编译主代码&#xff0c;并放到target/classes文件夹下> mvn clean package打包代码&#xff0c;我们可以看到target文件下生成了…

04- CoreData轻量级版本的迁移

CoreData版本的迁移 一 轻量级的数据迁移 例如添加新的实体&#xff0c;新的实体属性。 轻量级版本迁移方案非常简单&#xff0c;大多数迁移工作都是由系统完成的&#xff0c;只需要告诉系统迁移方式即可。在持久化存储协调器(PSC)初始化对应的持久化存储(NSPersistentStore…

通da信TCP长连接数据算法分析

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 分析通da信TCP长连接内部分数据的算法。”作为一款老牌的炒股软件&#xff0c;通da信里面的数据是相当的丰富&#xff0c;免费的也很丰富&#xff0c;准确性也很好&#xff0c;例如&#xff0c;这种股票之间关联的信息。通da信一…

产品经理怎么样用图表传达数据信息(多图)

上文有点仓促了&#xff0c;结尾没有写好。补上&#xff1a; 对劣质成本分析的时候应该注意&#xff1a; 1、在进行劣质成本分析的时候&#xff0c;要注意区分成本和必要的浪费。要注意一个关系&#xff0c;对必要浪费的控制会导致其他成本的上升。例如前文说到四小时送一次货&…

'This NSPersistentStoreCoordinator has no persistent stores 报错

可能是你改变coredata的属性项之后再运行的话在模拟器中会出现这个问题。找上面说的&#xff0c;找到mac下的模拟器中的程序路径&#xff0c;然后删掉其sqlite文件再运行就好了&#xff01;&#xff01;&#xff01;

tcp断开连接,4次握手,为什么wireshark 只能抓到3个包?

用wireshark 抓包&#xff0c;看看tcp 断开连接的过程. 以前书上说tcp断开连接&#xff0c;4次握手&#xff0c;可我为什么wireshark 只能抓到3个包&#xff1f; 百度一下&#xff0c;别人也有类似的疑问。 【求助】书上和网上的资料说&#xff0c;TCP拆除连接需要四次握手。但…

如何在python开发的GUI界面程序中恰当地使用PyExecJS

点击上方↑↑↑蓝字[协议分析与还原]关注我们“解决一闪而过的黑框的小技巧。”在使用python开发过程中&#xff0c;不可避免地&#xff0c;会开发带界面的应用&#xff0c;也会经常使用js来完成一些功能&#xff0c;比如&#xff0c;我使用python开发个了一个小应用&#xff1…

switch和case的理解

下面是复习java基础知识的时候&#xff0c;发现的一些点&#xff0c;总结下&#xff0c;备忘 int a345;switch (a) {case 23:System.out.println("23"); // break;case 345://条件符合&#xff0c;下面的case条件不会在判断&#xff0c;直接执行&#xff1b;System…

05-自己创建mapmodel自定义迁移方式

自动创建Mapping 如果模型的改变很大或者不支持轻量级数据迁移的条件&#xff0c;则我们需要进行自定义迁移。 使用映射模型 适用于更加复杂的数据的迁移 NSMappingModel 类似于数据模型 NSEntityMapping 告知迁移过程如何在目标数据存储中处理源实体的映射。 映射类型决…

Linux内核之内存管理(4)--缺页处理程序

本文主要解说缺页处理程序&#xff0c;凝视足够具体&#xff0c;不再解释。 //以下函数将一页内存页面映射到指定线性地址处&#xff0c;它返回页面的物理地址 //把一物理内存页面映射到线性地址空间指定处或者说把线性地址空间指定地址address处的页面映射到主内存区页面page上…

WebSocket协议分析

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 解析websocket数据格式。”好久不见&#xff0c;一晃一年又过去了&#xff0c;祝大家新年好运。今天&#xff0c;给大家分析一个常见的协议——WebSocket&#xff0c;这是一个标准协议&#xff0c;虽然没有HTTP历史悠久&#xff…

《postfix邮件服务下mailq、postmap、postqueue 、 postsuper等用法》

1、Mailq 功能说明&#xff1a;显示待寄邮件的清单。 语  法&#xff1a;mailq [-q] 补充说明&#xff1a;mailq可列出待寄邮件的清单&#xff0c;包括邮件ID&#xff0c;邮件大小&#xff0c;邮件保存时间&#xff0c;寄信人&#xff0c;收信人&#xff0c;以及邮件无法寄出…

[deviceone开发]-一个很炫的手势动画示例

一、简介 这是iOS下的效果&#xff0c;android下完全一致。通过do_GestureView组件和do_Animation组件&#xff0c;deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手势控制图片上下动画滑动实现开合效果&#xff0c;还支持声音效果。 二、效果图 三、相关下…

iOS lldb调试

LLDB 初始 LLDB 是一个有着 REPL 的特性和 C ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部&#xff0c;存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它&#xff0c;你可以查看变量的值&#xff0c;执行自定的指令&#xff0c;并且按照你所认为合适的…

万物之中,希望至美

一觉醒来&#xff0c;虎年就这么来了。感谢各位朋友过去的一年与我同在。在新的一年到来之际&#xff0c;我首先做个检讨&#xff0c;过去的一年&#xff0c;我们这个公众号&#xff0c;更新不够频繁&#xff0c;属于三天打鱼两天晒网型公众号&#xff0c;没有为大家带来足够丰…

[转]VS2015编译的程序在其他机器上缺少msvcp120.dll

http://www.lai18.com/content/1159618.html 1、 今天分享一个自己在开发过程中遇到的困难。用VS2015开发了一个windows客户端&#xff08;win32项目&#xff09;&#xff0c;在自己的机器上运行很流畅。当你得意的把releas版本进行打包&#xff0c;并进行发布后&#xff0c;问…

Discuz!的cookie机制

最近在做Discuz!的插件&#xff0c;需要用到cookie&#xff0c;一直觉得奇怪的一个问题&#xff0c;Discuz!大量使用了cookie&#xff0c;但是我在编写插件的时候如果不加入session_start函数cookie就无法使用&#xff0c;按理说Discuz!使用了这么多cookie它的核心应该有调用se…

iOS infoplist 权限设置

<dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> <key>NSBluetoothPeripheralUsageDescription</key> <string>需要使用您的蓝牙</string> <key>NSCalendarsUsageDes…

python使用socket实现协议TCP长连接框架

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 使用python实现协议中常见的TCP长连接框架。”分析多了协议就会发现&#xff0c;很多的应用&#xff0c;特别是游戏类和IM类应用&#xff0c;它们的协议会使用长连接的方式&#xff0c;来保持客户端与服务器的联系&#xff0c;这…

哈夫曼编码与解码

这是我的第一篇博客&#xff0c;希望大神们批评指正。 首先介绍以下什么是哈夫曼树&#xff08;来自百度百科&#xff09; 哈夫曼树─即最优二叉树&#xff0c;带权路径长度最小的二叉树&#xff0c;经常应用于数据压缩。 在计算机信息处理中&#xff0c;“哈夫曼编码”是一种一…

012-python基础-数据运算

1、算数运算&#xff1a; 2、比较运算 3、赋值运算 4、逻辑运算 5、成员运算&#xff1a; 6、身份运算&#xff1a; 7、位运算&#xff1a; 8、运算符优先级&#xff1a; 转载于:https://www.cnblogs.com/chhphjcpy/p/6064572.html