继续编写端对端加密报文部分
This commit is contained in:
parent
68e26768fc
commit
4b4523ae4a
@ -16,6 +16,7 @@
|
|||||||
#include "sqlite3.h"
|
#include "sqlite3.h"
|
||||||
#include "rsa.h"
|
#include "rsa.h"
|
||||||
#include "rng.hpp"
|
#include "rng.hpp"
|
||||||
|
#include "aes.hpp"
|
||||||
|
|
||||||
class Server;
|
class Server;
|
||||||
|
|
||||||
@ -46,21 +47,20 @@ struct request {
|
|||||||
|
|
||||||
//加密端对端报文
|
//加密端对端报文
|
||||||
struct encrypt_post{
|
struct encrypt_post{
|
||||||
// 明文部分
|
|
||||||
// 注册客户端id
|
// 注册客户端id
|
||||||
uint64_t client_id;
|
uint64_t client_id;
|
||||||
// 目标ip
|
// 目标ip
|
||||||
string ip;
|
string ip;
|
||||||
// 目标端口
|
// 目标端口
|
||||||
int port;
|
int port;
|
||||||
|
|
||||||
// 加密部分
|
|
||||||
// 匹配id
|
// 匹配id
|
||||||
rng::rng64 p_id;
|
uint64_t p_id;
|
||||||
// 类型
|
// 类型
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
// 内容
|
// 内容
|
||||||
Byte *buff;
|
Byte *buff;
|
||||||
|
// 内容长度
|
||||||
|
uint32_t buff_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
//回复数据包
|
//回复数据包
|
||||||
@ -139,8 +139,12 @@ struct server_info{
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct aes_key256{
|
struct aes_key256{
|
||||||
|
private:
|
||||||
uint64_t key[4];
|
uint64_t key[4];
|
||||||
|
public:
|
||||||
|
// 生成新的随机密钥
|
||||||
aes_key256();
|
aes_key256();
|
||||||
|
const uint8_t *GetKey(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
//通用服务器类
|
//通用服务器类
|
||||||
@ -227,8 +231,8 @@ public:
|
|||||||
static void Respond2Packet(packet &pkt, respond &res);
|
static void Respond2Packet(packet &pkt, respond &res);
|
||||||
static void Packet2Respond(packet &pkt, respond &res);
|
static void Packet2Respond(packet &pkt, respond &res);
|
||||||
|
|
||||||
static void Post2Packet(packet &pkt, encrypt_post &pst, rng::rng128 key);
|
static void Post2Packet(packet &pkt, encrypt_post &pst, aes_key256 &key);
|
||||||
static void Packet2Post(packet &pkt, encrypt_post &pst, rng::rng128 key);
|
static void Packet2Post(packet &pkt, encrypt_post &pst, aes_key256 &key);
|
||||||
};
|
};
|
||||||
|
|
||||||
class Client{
|
class Client{
|
||||||
@ -242,6 +246,8 @@ class Client{
|
|||||||
SocketUDPClient send_socket;
|
SocketUDPClient send_socket;
|
||||||
// 广场服务器通信公钥
|
// 广场服务器通信公钥
|
||||||
public_key_class sqe_pbc;
|
public_key_class sqe_pbc;
|
||||||
|
// 报文密钥
|
||||||
|
aes_key256 post_key;
|
||||||
public:
|
public:
|
||||||
// 构造函数(send_port指的是发送的目标端口)
|
// 构造函数(send_port指的是发送的目标端口)
|
||||||
Client(int port = 9050, string send_ip = "127.0.0.1",int send_port = 9049);
|
Client(int port = 9050, string send_ip = "127.0.0.1",int send_port = 9049);
|
||||||
|
@ -54,5 +54,6 @@ typedef char Byte;
|
|||||||
|
|
||||||
#define REQUSET_TYPE 100
|
#define REQUSET_TYPE 100
|
||||||
#define RESPOND_TYPE 101
|
#define RESPOND_TYPE 101
|
||||||
|
#define ENCRYPT_POST_TYPE 101
|
||||||
|
|
||||||
#endif /* type_h */
|
#endif /* type_h */
|
||||||
|
@ -561,3 +561,39 @@ void Server::ProcessSendPackets(void){
|
|||||||
aes_key256::aes_key256(){
|
aes_key256::aes_key256(){
|
||||||
for (int i = 0; i < 4; i++) key[i] = rand64();
|
for (int i = 0; i < 4; i++) key[i] = rand64();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uint8_t *aes_key256::GetKey(void){
|
||||||
|
return (const uint8_t *)&key;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SQEServer::Post2Packet(packet &pkt, encrypt_post &pst, aes_key256 &key){
|
||||||
|
pkt.type = ENCRYPT_POST_TYPE;
|
||||||
|
Addr taddr(pst.ip,pst.port);
|
||||||
|
pkt.address = *taddr.Obj();
|
||||||
|
pkt.AddBuff(&pst.client_id, sizeof(uint64_t));//0
|
||||||
|
pkt.AddBuff(&pst.p_id, sizeof(uint64_t));//1
|
||||||
|
pkt.AddBuff(pst.ip.data(), pst.ip.size());//2
|
||||||
|
pkt.AddBuff(pst.port, sizeof(uint32_t));//3
|
||||||
|
pkt.AddBuff(&pst.buff_size, sizeof(uint32_t));//4
|
||||||
|
// 加密数据
|
||||||
|
AES_ctx naes;
|
||||||
|
AES_init_ctx(&naes, key.GetKey());
|
||||||
|
AES_CBC_encrypt_buffer(naes, pst.buff, pst.buff_size);
|
||||||
|
pkt.AddBuff(&pst.buff_size, sizeof(uint32_t));//5
|
||||||
|
}
|
||||||
|
|
||||||
|
void SQEServer::Packet2Post(packet &pkt, encrypt_post &pst, aes_key256 &key){
|
||||||
|
pst.client_id = *(uint64_t *)pkt.buffs[0];
|
||||||
|
pst.p_id = *(uint64_t *)pkt.buffs[1];
|
||||||
|
pst.ip = (const char *)pkt.buffs[2];
|
||||||
|
pst.port = *(uint32_t *)pkt.buffs[3];
|
||||||
|
pst.buff_size = *(uint32_t)pkt.buffs[4];
|
||||||
|
Byte *t_data = (Byte *)malloc(pst.buff_size);
|
||||||
|
memcpy(t_data, pkt.buffs[5], pst.buff_size);
|
||||||
|
// 解密数据
|
||||||
|
AES_ctx naes;
|
||||||
|
AES_init_ctx(&naes, key.GetKey());
|
||||||
|
AES_CBC_decrypt_buffer(&naes, t_data, pst.buff_size);
|
||||||
|
pst.buff = t_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user