程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Client

Client

編輯:關於C++

0. 背景

最近,需要新做一個游戲demo,類似《部落沖突·皇室戰爭》的推塔玩法。客戶端使用Unity,編程語言為C#,服務端使用C++。由於從零開始,需要建立基礎部件,其中網絡模塊是最重要的模塊之一。網絡模塊協議遵從如下圖步驟時序圖進行通信。


圖1.通信步驟時序圖

 

由上圖可以看出網絡通信主要分為兩個步驟,第一步:客戶端使用RSA加解密請求通信服務端,獲取RC4秘鑰;第二步:客戶端與服務端使用RC4加解密通信。本文主要介紹第一步中在Server端(C++)的RSA加解密模塊。

注:本文不敘述網絡模塊中的框架設計,只關注在客戶端/服務端獲得加密消息後,進行解密的技術環節。

1. RSA加密與解密

RSA為非對稱加密方式,在C/C++中是基於使用OpenSSL庫來實現。通過以下4個步驟來簡單講述。

a). 使用OpenSSL產生RSA秘鑰

RSA的私鑰包含了公鑰的信息,所以首先通過以下命令產生長度為2048的RSA私鑰。

openssl genrsa -out private.pem 2048

這樣private.pem就會生成在當前目錄下,使用以下命令就可以從private.pem提取出public.pem。

openssl rsa -in private.pem -outform PEM -pubout -out public.pem

如此,就產生兩個秘鑰,不難猜出:

public.pem是使用PEM格式的公鑰,而private.pem是對應的私鑰。

b). 公鑰加密與私鑰解密

RSA是一種非對稱的加解密方式。基於它的特性,它可以以公鑰加密,然後私鑰解密;也可以以私鑰加密,公鑰解密。本小節羅列下OpenSSL對於RSA提供的接口:

[root@xxx crypt]# g++ -o bin/example -I/usr/include/openssl/ -lcrypto src/example.cpp

打印的結果:

[root@xxx crypt]# bin/example 
Encrypted length =256
Decrypted Text =Hello this is tab_space
Decrypted Length =23
Encrypted length =256
Decrypted Text =Hello this is tab_space
Decrypted Length =23

2. 總結

本文講述了在服務端(Linux/C++)使用OpenSSL庫對通信消息進行RSA非對稱加解密的技術過程,下一篇會講述客戶端(Unity/C#)使用OpenSSL庫對通信消息進行RSA加解密的技術過程。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved