我有客戶端和服務器,並希望加密它們之間的通信通道。 這是一些簡單的代碼來生成公鑰和私鑰:如何交換公鑰?
RSA::PrivateKey privateKey;
privateKey.Initialize()
///////////////////////////////////////
// Generate Parameters
InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(this->rng, 3072);
///////////////////////////////////////
// Generated Parameters
const Integer& n = params.GetModulus();
const Integer& p = params.GetPrime1();
const Integer& q = params.GetPrime2();
const Integer& d = params.GetPrivateExponent();
const Integer& e = params.GetPublicExponent();
params.
///////////////////////////////////////
// Dump
cout << "RSA Parameters:" << endl;
cout << " n: " << n << endl;
cout << " p: " << p << endl;
cout << " q: " << q << endl;
cout << " d: " << d << endl;
cout << " e: " << e << endl;
cout << endl;
///////////////////////////////////////
// Create Keys
RSA::PrivateKey privateKey(params);
RSA::PublicKey publicKey(params);
但我怎麼能得到服務器端和客戶端服務器的公鑰客戶端的公鑰?可能存在比序列化文件中的公鑰更簡單的方式,發送文件,接收另一端的文件並將其反序列化?
類別Chat
有DataTransferingInterface
實例,它指向Server
或Client
(取決於用戶是否已經選擇了開始)。 對理解某些代碼:
類聊天:
class Chat : public OwnerServerInterface, public OwnerClientInterface
public:
//a lot of methods
protected:
virtual void handshakeServerSide(int clientSocket, void *objectForSaveIn, void *dataToSend);
virtual void handshakeClientSide(int serverSocket, void *objectForSaveIn, void *dataToSend);
private:
DataTransferingInterface* interface;
的方法handshakeServerSide()
和handshakeClientSide()
Server的實例Chat
和客戶端的Chat
實例進行握手(數據交換)。在這種方法中,服務器必須發送它自己的公鑰,並獲取客戶端的公鑰。但怎麼做呢?
沒有人能真實地回答你的問題,因爲你沒有提供關於客戶端和服務器如何實際通信的信息,也沒有提供如何在代碼中實現通信的信息。 – Olipro
是的,有序列化密鑰的標準。例如,參見[RFC 3447](http://tools.ietf.org/html/rfc3447)附錄A.1.1(並且,因爲它使用ASN.1,ASN.1上的標準參考之一)。 –