通用消息模块

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。util。同时发生的叉子在游泳池里。常见的并行性准则,用于选择正确的并行度大小   java如何将空白字符追加到指定长度?   安卓应用程序中出现错误,SSLHandshakeException,找不到证书路径的信任锚点   java如何使用JUnit Mockito验证检查方法是否未被调用   java如何使用不同的@RequestMapping解析多个控制器中的静态页面   Selenium中的javascript需要验证搜索结果   访问数据库SQLiteopenHelper方法时java应用程序崩溃(nullpointerexception)   在二叉树中验证最小堆时出现java空指针异常   Java 7的SSL连接失败   java用RestEasyWebTarget替换ProxyFactory不起作用   在Java应用程序中单击“否”按钮后,数组程序冻结(无响应)   数组中的前缀Java初学者前进和   Java HTML解析器,包括脚本标记和LineNumberReader   在java中为长类型数字加前导零   正则表达式无法映射正则表达式java。lang.IllegalArgumentException:模式段中捕获组的数量