Socket安全
来源:互联网 发布:js new对象删除 编辑:程序博客网 时间:2024/06/05 22:44
Socket安全
之前我们用的Socket是包的长度加包体内容
/// <summary>
/// 封装数据包
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
private byte[] MakeData(byte[] data)
{
byte[] retBuffer = null;
using (MMO_MemoryStream ms = new MMO_MemoryStream())
{
ms.WriteUShort((ushort)data.Length);
ms.Write(data, 0, data.Length);
retBuffer = ms.ToArray();
}
return retBuffer;
}
然后,我们对数据进行安全加密,这里就需要我们从新处理一下我们这个数据包了,因为传输的数据要具有一定的安全性,所以就要对其内容多加一下处理,
1还是要标明咱们的包的总长度
2这里我们做一个压缩的处理,游戏数据太大我们就需要进行压缩处理
3CRC16效验,这是用来判断我们收到的数据是否具有完整性,还有是否被修改过
4然后在用Xor异或对内容再次进行加密
5异或之后的数据就是咱们真正需要的数据
具体代码如下
这里是封装数据包
private byte[] MakeData(byte[] data)
{
byte[] retBuffer = null;
//1,如果数据包的长度大于m_CompressLen 则进行压缩
bool isCompress = data.Length > m_CompressLen ? true : false;
if (isCompress)
{
byte[] compressBuffer = ZlibHelper.CompressBytes(data);
}
//2先异或
data = SecurityUtil.Xor(data);
//3Crc效验
ushort crc = Crc16.CalculateCrc16(data);
using (MMO_MemoryStream ms = new MMO_MemoryStream())
{
ms.WriteUShort((ushort)(data.Length + 3));
ms.WriteBool(isCompress);
ms.WriteUShort(crc);
ms.Write(data, 0, data.Length);
retBuffer = ms.ToArray();
}
return retBuffer;
}
然后咱们需要把这些数据进行解析
using (MMO_MemoryStream ms = new MMO_MemoryStream(buffer))
{
//判断是否压缩
isCompress = ms.ReadBool();
//crc
crc = ms.ReadUShort();
ms.Read(bufferNew, 0, bufferNew.Length);
}
int newCrc = Crc16.CalculateCrc16(bufferNew);
if (newCrc == crc)
{
//异或 得到原始数据
bufferNew=SecurityUtil.Xor(buffer);
if (isCompress)
{
bufferNew =ZlibHelper.DeCompressBytes(bufferNew);
}
ushort protoCode = 0;
byte[] protoContent = null;
using (MMO_MemoryStream ms = new MMO_MemoryStream(buffer))
{
//协议编号
protoCode = ms.ReadUShort();
ms.Read(protoContent, 0, protoContent.Length);
EventDispatcher.Instance.Dispatch(protoCode, protoContent);
}
}
else
{
break;
}
以上是客户端的代码,服务端的代码和客户端的是一样的,这里我就不写了
阅读全文
0 0
- Socket安全
- Socket安全
- Socket安全
- Socket网络通信安全
- Socket通讯协议与socket安全
- Java 网络编程 安全 Socket
- C# Socket的安全关闭
- 第10章 安全Socket
- Java SSL Socket:keytool工具与安全Socket通信
- 使用SSL构建安全的Socket
- 使用SSL构建安全的Socket
- 用SSL构建安全的Socket
- 文件和SOCKET跨线程安全吗?
- 利用socket安全发送一段数据
- 基于Windows Socket的安全通信
- SSL双向认证构建安全的Socket
- 文件和SOCKET跨线程安全吗?
- 安全套接层 Secure Socket Layer (SSL)
- UserLoginTimes代码
- Introduction to Algorithms
- mysql查询的方式
- Redis经常连接不上还报 Connection reset by peer: socket write error的错误的解决办法
- 弱校胡策 埃罗芒阿老师(贪心)
- Socket安全
- typdef与define的区别
- 《第一行代码 Android 第2版》学习记录
- 关于新词发现
- oracle 用户被锁定解锁方法
- Tornado框架01-高性能简介
- Problem I. International Collegiate Routing ContestGym
- HTML5语义化标签综合基础案例
- scala(1:函数式编程新)