qq_58162458 2021-09-27 01:40 采纳率: 76.5%
浏览 173
已结题

json字符串如何在socket通信中

要求经过utf-8编码显示数据长度和版本号和标志 加上json字符串转成的指令数据包 他们一起叫做明文数据包
就是怎么把他们放在一起呢

  • 写回答

4条回答 默认 最新

  • Winson.J 2021-09-27 04:10
    关注

    你应该先发这个图啊!!!!
    我给你的报文结构,是没有要求情况下,重0开始设计的;图中是已经设计好的报文结构,就按这个结构开发。。。

    1. 先组好json格式的指令包
    2. 对指定包加密
    3. 组报文,比如版本是1,标志是A,加密指令包 xxxxxxxxxx

    示意代码,只表示思路
    StringBuffer sb = new StringBuffer();
    sb.append("1");//1个字节版本号
    sb..append("A“);//1个字节标志
    sb.append("xxxxxxxxxx");//加密指令包
    int length = sb.toString().getBtyes("Utf-8“”).length();//指令包长度, 这个长度是否包含版本号,标志看要求
    String message = length + sb.toString();//发送的消息
    最后的报文
    xxxx1A000000000000000000000000000000000000000000000000000000

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    qq_58162458 2021-09-27 05:42

    img


    它是由两次加密的第二次计算
    第一次只对指令数据包加密

    img


    第二次是对mac进行计算

    img

    这最后要算出来mac值是要拼接到发送的消息后面是吗
    先加密指令数据包在使用StringBuffer拼接是吗

    回复
    Winson.J 回复 qq_58162458 2021-09-27 06:07

    1.先组好json格式的指令包
    2. 使用加密key ,对指令包加密
    3. 使用完整性key,对加密过的指令包再加密,对这次的结果截取前4个字节
    4. 组报文,比如版本是1,标志是A,加密指令包 xxxxxxxxxx mac是####

    示意代码,只表示思路
    StringBuffer sb = new StringBuffer();
    sb.append("1");//1个字节版本号
    sb..append("A“);//1个字节标志
    sb.append("xxxxxxxxxx");//加密指令包
    sb.append(mac);//mac
    int length = sb.toString().getBtyes("Utf-8“”).length();//指令包长度, 这个长度是否包含版本号,标志看要求
    String message = length + sb.toString();//发送的消息
    最后的报文
    xxxx1A000000000000000000000000000000000000000000000000000000####

    回复
    qq_58162458 回复 Winson.J 2021-09-27 06:17

    能问一下我这个加密密钥是就是我在
    byte[] key = "7473BB1227784AF6A05DDE52C3155099".getBytes();
    设置得密钥吧

    回复
    展开全部30条评论
查看更多回答(3条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月27日
  • 创建了问题 9月27日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部