1. 程式人生 > >擔心酒店資訊洩露,我用Python寫了段加密演算法,看你怎麼破

擔心酒店資訊洩露,我用Python寫了段加密演算法,看你怎麼破

前段時間的酒店資訊洩露事情,鬧的沸沸揚揚!確實我們很多的資料在網路上都是裸奔,在資料庫裡面躺著也都是明文資料,連我自己的寫某某程式都被熱情的粉絲攻破!不如,我們用萬能的Python寫段加密資料傳送玩玩,也許就能避免酒店資料洩漏了!

  • 簡單的場景:

  • Server:Welcome

  • Client: Hi,I am 007 !

  • Server:Goog Monning 007.

  • Client: My password 1234!

  • Server:OK,Receiver your password.

上面是模擬簡單的CS場景,算是很典型的socket互動場景,裡面的使用者名稱和密碼都是明文傳送的,相當不安全,我們用程式碼來演示一下。

01.模擬客戶端-服務端

Python裡面的庫真的是非常多,只有你想不到。基本上你想要做的大部分事情都有現成的輪子,不用自己造,socket當然也有!

1).建立Server端

用socket模組建立一個套接字物件server,繫結本地的ip和埠,埠要用冷門的埠!

2).響應Client端的請求

服務端需要響應客戶端的請求,我們從sock裡面獲取資料,然後再給client迴應一段echo訊息.

我們用一個死迴圈來不斷的處理客戶端的請求訊息,這裡為了簡單處理,我們不做任何的資料分析,只是接受client的資料,然後從隨機應答佇列裡面,挑一條訊息發給客戶端。(注意sock裡面傳送全部都是byte型別,需要做str和byte的轉換)

3).響應多個Client的請求

為了更多更快的處理客戶端的請求,我們這裡用多執行緒來處理,來一個請求,我們來一個執行緒.

4).建立Client端

也是建立socket物件,建立client端,然後繫結本地地址和埠。

5).客戶端傳送資料給伺服器

我們傳送兩條資料給伺服器,一條是"我是007",一條是"我的密碼1234"。

好,經過上面5步,基本上一個簡單的socket通訊程式碼就出來了。整個程式碼量不超過100行,我們簡單執行一個看看什麼效果:

伺服器:

客服端:

那麼問題來了,我們的使用者名稱和密碼都是明文傳送的,有麼有辦法加密呢,當然有,初級加密登場!

02.初級加密

上面的步驟完成了一個client/server的通訊,但是我們的重要資訊都是明文,完全暴露了,稍微用一個小爬蟲就能搞定你的資料,這樣太不安全了,我們用Python裡面的base64模組來加密一下,稍微偽裝一下:

>>紅色部分就是加密過的密文

raw msg: b'Hi,I am 007'

decode msg: b'SGksSSBhbSAwMDc='

restore msg: b'Hi,I am 007'

裡面Python裡面強大的base64這個模組,這個模組是一種查表的編碼方式,可以簡單的做一些加密, 比如我們輸入"我是 007",就會變成一堆亂七八糟的字元在網上傳送,然後我們伺服器那邊只要用base64解密即可 。

我們依葫蘆畫瓢也在我們剛才的socket通訊例子上面加上加密部分decode_daya函式,然後傳送資料即可!

伺服器:

客服端:

看一下效果,我們的密碼變成一堆蝌蚪文:

Rec Welcome Client!

Send>>: b'Hi Server,I am 007!(16:39:17)'

networking: b'SGkgU2VydmVyLEkgYW0gMDA3ISgxNjozOToxNyk='

Rec <<: Hi,Client:Good Morning(16:39:17)

Send>>: b'My password is 1234!(16:39:20)'

networking: b'TXkgcGFzc3dvcmQgaXMgMTIzNCEoMTY6Mzk6MjAp'

Rec <<: Hi,Client:Welcome(16:39:20)

03.神級加密

上面的初級加密只能防禦一般的菜鳥,遇到高手, 要破解你的使用者名稱,密碼資訊還是比較輕鬆的, 對方只要也用base64解密一下即可!不要慌, Python裡面還有一個神級加密的庫pycrypto,這個是第三方庫,非常牛逼。

這個庫內容非常豐富,有很多加密的方法, 這裡我們用AES高階加密標準 。AES的區塊長度固定為128 位元,金鑰長度則可以是128,192或256位元(16、24和32位元組),我們用長度為16位元組的來示例一下:

也就是說,你在網路上傳送的資料是encrpy_data,即使×××截獲你了資料,如果它沒有金鑰是無法解密的!就算他要暴力破解也很難,因為是128位元的字元,而且是雙重金鑰,難度非常大!

看完之後是不是也想學Python呢,瞭解更多,視訊資料免費領取