二.kerberos協議的實現
現有alice、as、tgs、bob,實現alice和bob的安全金鑰交換
這裡只實現alice和as之間的通訊
我把各個部分的**拆開來寫:
1.隨機會話金鑰生成
#include#include2.加密演算法using
namespace
std;
intmain()
#include #include3.解密演算法using
namespace
std;
intmain()
else
}
else
if(isdigit(c))
else
}cout
}
#include #include4.map屬性讀取內容(對應主金鑰)//後來實際操作的時候還是定義了map,省去了int轉stringusing
namespace
std;
intmain()
else
}else
if(isdigit(c))
else
}cout
}
#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...