醫調專案之C 服務端與客戶端JS通訊資料加密

2021-06-22 01:43:08 字數 2579 閱讀 3198

前段時間做的乙個專案需要進行安全評測,由於之前在**安全性方面沒有考慮太多。現在只好硬著頭皮做好補救工作。

使用者密碼這一塊還算輕鬆,md5加密放入資料庫中就沒啥問題了。

關鍵是這個專案服務端和客戶端通訊用的是ajax,資料格式是json,而且全部是明文。這種情況拿去評測擺明了通不過啊。無奈只好去網上找找有沒有現成的**。

服務端還好說,用.net自帶的壓縮函式deflatestream處理之後再進行base64編碼就可以了。

服務端壓縮+base64編碼:

/// /// deflate壓縮函式

///

///

///

public static string deflatecompress(string strsource)

//using (gzipstream gzipstream = new gzipstream(ms, compressionmode.compress))

//byte compresseddata = ms.toarray();

ms.close();

return convert.tobase64string(compresseddata); //將壓縮後的byte轉換為base64string

}}

剩下的就是客戶端js部分了。

首先要進行base64解碼,然後再解壓縮。這裡需要注意的是在進行base64解碼的時候必須進一步呼叫utf8to16()這個js方法,否則可能會出現中文亂碼的情況。

js解壓縮呼叫的是網上的乙個js指令碼。不過我在這裡吃了乙個大虧,花了好長時間才算搞清楚。網上的**基本上都是這樣:utf8to16(zip_depress(base64decode(srtn)))

utf8to16和base64decode 相信大家都能理解。可是最關鍵的解壓縮函式被人改了函式名,後來也有人發現了這個問題,不過她沒有把原來的函式名給寫出來,導致我花了不少時間。實際上zip_depress這個函式的函式原名是 zip_inflate 。

base64解碼:

string.prototype.utf16to8 = function ()  else if (charcode > 0x07ff)  else 

}return ret;

}string.prototype.utf8to16 = function ()

}return ret;

}string.prototype.encodebase64 = function ()

charcode2 = str.charcodeat(i++);

if (i == len)

charcode3 = str.charcodeat(i++);

ret += base64encodechars.charat(charcode1 >> 2);

ret += base64encodechars.charat(((charcode1 & 0x3) << 4) | ((charcode2 & 0xf0) >> 4));

ret += base64encodechars.charat(((charcode2 & 0xf) << 2) | ((charcode3 & 0xc0) >> 6));

ret += base64encodechars.charat(charcode3 & 0x3f);

}return ret;

}string.prototype.decodebase64 = function () while (i < len && charcode1 == -1);

if (charcode1 == -1) break;

do while (i < len && charcode2 == -1);

if (charcode2 == -1) break;

ret += string.fromcharcode((charcode1 << 2) | ((charcode2 & 0x30) >> 4));

do while (i < len && charcode3 == -1);

if (charcode3 == -1) break;

ret += string.fromcharcode(((charcode2 & 0xf) << 4) | ((charcode3 & 0x3c) >> 2));

do while (i < len && charcode4 == -1);

if (charcode4 == -1) break;

ret += string.fromcharcode(((charcode3 & 0x03) << 6) | charcode4);

}return ret;

}

js 解壓縮:

最後附上我的demo**

服務端:

srtncontent = comn.deflatecompress(srtncontent);

客戶端:

zip_inflate(srtn.decodebase64()).utf8to16(); //base64解碼-解壓縮

C 服務端與客戶端

c 服務端與客戶端連線實現的由來 那麼既然乙個伺服器端口可以應對多個客戶端連線,那麼接下來我們就看一下,如何讓多個客戶端與服務端連線。如同我們上面所說的,乙個tcpclient就是乙個socket,所以我們只要建立多個tcpclient,然後再呼叫connect 方法就可以了 c 服務端與客戶端連線...

Actor專案之服務端 客戶端

本 使用語言是scala,首先需要說明一下actor的執行原理 圖中只是說明了乙個actor物件給自己發訊息,多個actor發訊息的原理相同 這是乙個actor的執行機理,actor的本質是自己給自己發訊息。1.首先建立乙個class物件繼承actor,裡面必須重寫receive方法,receive...

服務端與客戶端互動

搭建伺服器 伺服器端 using system.net.sockets using system.net using system.io using system.text namespace sockerservice endpoint point new ipendpoint ipaddress...