通用消息模块

dkd的Python项目详细描述


道可道——消息模块(python)

licenseVersionPRs WelcomePlatform

这个document引入了一个公共的消息模块,用于分散式即时消息传递。

版权所有©2018-2019 Albert Moky

0。信封

消息信封

/* example */{sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083}

1。内容

/* example */{type:0x01,// message typesn:412968873,// serial number (message ID in conversation)text:"Hey guy!"}

消息内容类型
enum{DIMContentType_Unknown=0x00,DIMContentType_Text=0x01,DIMContentType_File=0x10,DIMContentType_Image=0x12,// photoDIMContentType_Audio=0x14,// voiceDIMContentType_Video=0x16,DIMContentType_Page=0x20,// web page// quote an exists message and reply it with textDIMContentType_Quote=0x37,// system commandDIMContentType_Command=0x88,// top-secret message forward by proxy (Service Provider)DIMContentType_Forward=0xFF};

2。消息

当用户要发送消息时,客户端需要两个步骤才能发送消息:

  1. 加密即时消息安全消息
  2. secure消息签名到reliable消息

因此,当客户端收到消息时,需要两个步骤来提取内容:

  1. 验证可靠消息安全消息
  2. 解密安全消息即时消息
MessageTransforming~~~~~~~~~~~~~~~~~~~~InstantMessage<-->SecureMessage<-->ReliableMessage+-------------++------------++--------------+|sender||sender||sender||receiver||receiver||receiver||time||time||time||||||||content||data||data|+-------------+|key/keys||key/keys|+------------+|signature|+--------------+Algorithm:data=password.encrypt(content)key=receiver.public_key.encrypt(password)signature=sender.private_key.sign(data)

即时消息

/* example */{//-------- head (envelope) --------sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083,//-------- body (content) ---------content:{type:0x01,// message typesn:412968873,// serial number (ID)text:"Hey guy!"}}

内容->;json字符串:{"sn":412968873,"text":"Hey guy!","type":1}

安全消息

/** *  Algorithm: *      string = json(content); *      PW     = random(); *      data   = encrpyt(string, PW);      // Symmetric *      key    = encrypt(PW, receiver.PK); // Asymmetric */{//-------- head (envelope) --------sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083,//-------- body (content) ---------data:"9cjCKG99ULCCxbL2mkc/MgF1saeRqJaCc+S12+HCqmsuF7TWK61EwTQWZSKskUeF",key:"WH/wAcu+HfpaLq+vRblNnYufkyjTm4FgYyzW3wBDeRtXs1TeDmRxKVu7nQI/sdIALGLXrY+O5mlRfhU8f8TuIBilZUlX/eIUpL4uSDYKVLaRG9pOcrCHKevjUpId9x/8KBEiMIL5LB0Vo7sKrvrqosCnIgNfHbXMKvMzwcqZEU8="}

可靠消息
/** *  Algorithm: *      signature = sign(data, sender.SK); */{//-------- head (envelope) --------sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083,//-------- body (content) ---------data:"9cjCKG99ULCCxbL2mkc/MgF1saeRqJaCc+S12+HCqmsuF7TWK61EwTQWZSKskUeF",key:"WH/wAcu+HfpaLq+vRblNnYufkyjTm4FgYyzW3wBDeRtXs1TeDmRxKVu7nQI/sdIALGLXrY+O5mlRfhU8f8TuIBilZUlX/eIUpL4uSDYKVLaRG9pOcrCHKevjUpId9x/8KBEiMIL5LB0Vo7sKrvrqosCnIgNfHbXMKvMzwcqZEU8=",signature:"Yo+hchWsQlWHtc8iMGS7jpn/i9pOLNq0E3dTNsx80QdBboTLeKoJYAg/lI+kZL+g7oWJYpD4qKemOwzI+9pxdMuZmPycG+0/VM3HVSMcguEOqOH9SElp/fYVnm4aSjAJk2vBpARzMT0aRNp/jTFLawmMDuIlgWhBfXvH7bT7rDI="}

(所有数据都使用base64编码算法作为默认值)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
正在从节点解密字符串。Java中的js?   java未来超时和IO超时   java apache camel多播以异步方式执行聚合   java需要710次尝试在Android和Raspberry Pi之间建立socket连接   在Java中使用“+,”循环绘制形状   java安卓:如何计算两点之间的距离   java多线程Hello World   刷新后缓存共享变量的java Freemarker模板   java我试图通过迭代用整数填充数组,但我得到了ArrayIndexOutOfBoundsException   JNI C++到java 32位图像的不正确显示   java哪个更快:克隆还是使用流?   java cache2k和Generic T不能很好地结合在一起   java如何在读取文件之前更新文件内容?   java如何在GWT中从JSNI方法调用JSNI方法   将MySQL类型文本映射到Java Hibernate的类型   java如何按长度对字符串排序   java RecyclerView:在滚动期间不断更改数据