WinSocket程式設計筆記(三)

2022-04-29 15:21:11 字數 2527 閱讀 6182

二.kerberos協議的實現

現有alice、as、tgs、bob,實現alice和bob的安全金鑰交換

這裡只實現alice和as之間的通訊

我把各個部分的**拆開來寫:

1.隨機會話金鑰生成

#include#include

using

namespace

std;

intmain()

2.加密演算法

#include #include 

using

namespace

std;

intmain()

else

}

else

if(isdigit(c))

else

}cout

}

3.解密演算法

#include #include

using

namespace

std;

intmain()

else

}else

if(isdigit(c))

else

}cout

}

4.map屬性讀取內容(對應主金鑰)//後來實際操作的時候還是定義了map,省去了int轉string

#include #include 

#include

#include

using

namespace

std;

intmain()

然後就是結合之前的伺服器**,修改合併,之間好幾次又要做到型別轉換,否則會出錯

伺服器端主要**:

if(*a==*secret)//

儲存空間位置不同,不能直接比較,驗證alice主金鑰是否和發來的金鑰相同

else

}

else

if(isdigit(c))

else

}//string轉char,cipher -> p

char p[100

];

inti;

for( i=0;i)

p[i] = '\0'

; cout

<

密文tgt:

"//alice主金鑰加密隨機會話金鑰

string plain2=kkskey;

string cipherr=""

;

int offset2 = 12345 % 26

;

for(int i = 0; i < plain2.length(); i++)

else

}

else

if(isdigit(c2))

else

}//string轉char,cipherr -> p2

char p2[100

];

inti2;

for( i2=0;i2)

p2[i2] = '\0'

; cout

<

alice主金鑰加密的kskey:

"//alice主金鑰加密tgt

string plain3=cipher;

string cipherrr=""

;

int offset3 = 12345 % 26

;

for(int i3 = 0; i3 < plain3.length(); i3++)

else

}

else

if(isdigit(c3))

else

}//string轉char,cipherrr -> p3

char p3[100

];

inti4;

for( i4=0;i4)

p3[i4] = '\0'

; cout

<

alice主金鑰加密以後的tgt:"}

客戶端**基本上沒有變化,這裡就不貼上了

執行結果(因為不是同一次執行截圖,所以結果不一樣):

伺服器端:

客戶端:

收到資訊:

(待續)

WinSocket程式設計筆記(五)

三.udp的socket程式設計 先前的socket伺服器端與客戶端需要建立連線才能通訊,因此是面向連線的基於tcp的socket。而這裡的基於udp的socket是面向無連線的,也就是說不必呼叫 listen 和 accept 函式,那麼connect 函式也就一樣沒有使用的必要了。udp新增的函...

WinSocket程式設計筆記(一)

前言 注 以下 都以c 環境為例 一.windows socket 基礎 windows socket dll的初始化和釋放函式的呼叫方法 windows socket 網路程式設計思路 1.初始化 windows socket 2.建立socket 3.將socket與位址結構繫結 4.傳送 接收...

WinSocket程式設計(C )例項三

1 首先新建專案 win32控制台應用程式 2 解決方案 新增 新建專案,兩個專案都新增ws2 32.lib鏈結庫 1,2步驟可參考 winsocket程式設計 c 例項一 3 直接上 ient adrconv win.cpp include stdafx.h include include voi...