文档:网络通讯包结构(crc校验,加解密)

包结构:



对(datacrc+protoID+dataSize)组成的byte[] 进行crc计算而得到


对(数据内容)进行crc计算而得到


协议号


数据内容的字节长度


数据内容


字段


headcrc


datacrc


protoID


dataSize


data


类型


uint


uint


ushort


ushort


byte[]


字节数


4


4


2


2


dataSize

  1. crc校验

问:TCP协议中,底层做了校验,那通信时我们还有必要再进行有CRC或者其他校验吗?

答:tcp 是可靠的, 就是有重传, 校验, 有序等保证. 在字节流层次, 你不用验证了.

但是协议层可靠不代表应用层可靠, 应用层数据校验只能自己做CRC/MD5/SHA1

因为tcp是基于流的,一个报文可能分多个包发送,你自己要要验证报文的完整性

TCP 的校验只能保证物理电路上如果出错, 可以发现并通过重传来修正. 但是对人为的对包恶意的修改是无法校验的。如果是安全要求比较高的地方, 最好还是自己再校验下.

问:为什么选crc ?

答:CRC(Cyclic Redundancy Check,循环冗余校验)

其校验准确度较之普通的奇偶校验、校验和等方法更高,当然计算也略微复杂;

较之MD5、SHA1等算法,CRC安全性和准确度方面又略显不足,

但计算较之这两者明显简单,效率更高。

所以如果仅仅针对网络数据的一致性校验,即收发端数据的是否一致

(因为在Socket编程里,单次收到数据的长度和发送数据的长度即使在阻塞模式下,也不一定是相同的,这个依赖于网络环境,虽然TCP协议保证了数据的完整性和一致性,但像人为对数据进行了分片的这种情况,在收到数据时视情况还是有必要进行一下校验),

针对这种校验要求,CRC32是明显足够,也不会带来很大的计算负担。

2.加密,解密

介绍:

不可逆加密:md5 ,sha1,加密后就不能解密,只能用于存储密码和校验文件变动,不能用网络通讯

可逆对称加密DES3DESAES

可逆非对称加密 RSA

选定:对称加密:DES  非对称加密:RSA

.net有封装好的,DESCryptoServiceProvider, RSACryptoServiceProvider

流程:

一般流程为:先用非对称加密去加密对称加密的密钥(对称加密的密钥比较短,可视为不怎么耗时,然后再用对称加密去加密数据。

也就是说:

客户端用RSA生成公钥和私钥,发送公钥给服务器,服务器用收的公钥对3DES的key进行加密后,发还给客户端,客户端用私钥进行解密得到3DES的key,之后就可以用此key来进行加密解密。

3.数据内容形式:json, protobuf-net, protobuf-java, pbc, pb-lua-gen, sproto

选定:Client:pbc   Server: protobuf-java (我的服务器是java写的)

时间: 2024-09-28 21:17:04

文档:网络通讯包结构(crc校验,加解密)的相关文章

Nginx部署文档(二进制包安装)

Nginx部署文档(二进制包安装) 创建时间:2016-06-27 修改时间:2017-03-04 修改时间:2017-03-06 文档目的2 基础知识2 常用命令2 系统环境2 操作步骤3 1. 安装依赖3 2. 安装nginx3 3. 启动nginx5 3. 关闭防火墙6 4. 修改生产环境配置6 常见问题7 问题一:报错"cp: `conf/koi-win' and `/usr/local/nginx/conf/koi-win' are the same file"7 问题二:[

云享 值得一用的在线文档即时通讯平台 新用户持续免费

云享 值得一用的在线文档即时通讯平台 新用户持续免费 https:\\Cloudshare.im 我们的特征是团队版本的文档库,同时提供完美的手机APP支持,更妙的是提供类微信体验的通知.即时沟通工具,热烈邀请大伙,伙伴们来体验,给我们反馈. 友好的用户反馈,可以直接留言在当下的Blog https:\\cloudshare.im [email protected] [email protected] b@cloudshare.im c@cloudshare.im 密码 111111 云享 值得

XML文档部署到Tomcat服务器上总是加载出错

config.xnl 起初文档路径是在src/Dao/config.xml 在Dao目录下BaseDao类中,解析config.xml文件路径 path="/Dao/config.xml",似乎正常,可运行Tomcat总是报错,系统找不到指定文件路径 我又将其放在src/WEB-INFO等文件根目录下,依然显示系统找不到指定文件路径.百度一番,各种建议均无效后,花两小时调试后,总结两种方法 第一种:通过url可以直接请求到服务器资源,那么就将config.xml文件放在Web根目录下,

类的无参带参方法、变量作用域、JavaDoc文档注释、包

如何定义类的方法 public 返回值类型 方法名(){ //方法的主体 } return:  如果有返回值      跳出方法.返回结果. 如果一个方法有返回值的话,那调用这个方法就会得到这个方法的返回值 方法名一般采用驼峰命名法 Admin admin = new Admin(); 对象是通过类来创建出来的,所以对象的类型是  Admin    也就是说 类是对象的类型 admin.方法名();      //调用无参的构造方法 同一个类中的方法,直接使用方法名调用该方法 不同类的方法,首先

[ Laravel 5.1 文档 ] 架构 —— 应用目录结构

1.简介 Laravel应用默认的目录结构试图为不管是大型应用还是小型应用提供一个好的起点,当然,你可以自己按照喜好重新组织应用目录结构,Laravel对类在何处被加载没有任何限制——只要Composer可以自动载入它们即可. 2.根目录 新安装的Laravel应用包含许多文件夹: app目录包含了应用的核心代码: bootstrap目录包含了少许文件用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架生成的启动文件以提高性能: config目录包含了应用所有的配置文件: data

DOM1 更新文档的内容、结构和样式 练习题

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>日历</title>    <style>     #container{          width:300px;          height:560px;          margin: 20px auto;        

QQ通讯协议里的TEA加解密算法

#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <string.h> #include <time.h> //#define CRYPT_ONE_BYTE typedef char int8 ; typedef unsigned char uint8 ; typedef short int16 ; typedef unsigned short uint16 ;

XML文档类型定义---XML Schema结构

5.1 Schema概述 XML Schema是2001年5月正式发布的W3C的推荐标准,经过数年的大规模讨论和开发如今终于尘埃落定,成为全球公认的XML环境下首选的数据建模工具. 使用DTD虽然带来较大的方便,但是,DTD存在一些缺陷:一是它用不同于XML的语言编写,需要不同的分析器技术.这增加了工具开发商的负担,降低了软件瘦身的可能性,此外开发人员需要多学一门语言及其语法.而XML Schema是按标准XML规则编写的,更容易掌握.二是DTD不支持名称空间.随着大部分的数据处理日益以XML为

【Win10 应用开发】自适应Toast通知的XML文档结构

原文:[Win10 应用开发]自适应Toast通知的XML文档结构 老规矩,在开始之前老周先讲个故事. 话说公元2015年7月20日,VS 2015发布.于是,肯定有人会问老周了,C#6有啥新特性,我学不来啊.学不来的话你应该检讨.老周比较保守地计算一下,学会C# 6只需要20秒,不信的话,老周笔划笔划一下,你就明白了. 1.属性自动初始化.在4.0中引入了这样声明属性: public int VVVV { get; set;} 以前是属性包装一个字段,在初始化属性时只要对字段赋值即可,这个省略