資源簡(jiǎn)介
最近打算使用 python3 寫(xiě)一個(gè)圖形化的聊天室,需要涉及到 RSA 加密模塊,使用的是 python 自帶的 RSA 加密模塊。主要功能: 1. 作為聊天室服務(wù)器登錄
2. 作為聊天室客戶端登錄
3. 客戶端鏈接服務(wù)器IP
4. 客戶端1與服務(wù)器進(jìn)行驗(yàn)證
5. 客戶端2與服務(wù)器進(jìn)行驗(yàn)證
6. 客戶端1加密消息并發(fā)送
7. 服務(wù)器解密消息并轉(zhuǎn)發(fā)到客戶端2
8. 客戶端2發(fā)送消息同客戶端1
代碼片段和文件信息
#!/usr/bin/env?python3
#?導(dǎo)入cryptography庫(kù)的相關(guān)模塊和函數(shù)
from?cryptography.hazmat.backends?import?default_backend
from?cryptography.hazmat.primitives?import?serialization
from?cryptography.hazmat.primitives.asymmetric?import?padding
#?定義輔助函數(shù),用于打印16進(jìn)制數(shù)據(jù)
def?dump_hex(buffer?sep=‘?‘?indent=0?line_size=16):
????“““
????輔助函數(shù),將bytes數(shù)組以如下格式打印輸出:
????0000:?40?71?37?d0?80?32?7f?04?d9?6d?fb?fc?f7?6a?7d?d4
????0010:?48?ad?75?79?7a?0d?6c?55?01?ed?45?d5?1e?75?33?a6
????:param?buffer:?待打印數(shù)據(jù)
????:param?sep:?各16進(jìn)制數(shù)據(jù)之間的分隔符,默認(rèn)用空格‘?‘分隔
????:param?indent:?打印輸出前是否需要縮進(jìn),默認(rèn)不縮進(jìn)
????:param?line_size:?每行輸出16進(jìn)制的數(shù)量,默認(rèn)1行輸出16個(gè)
????:return:?無(wú)返回值
????“““
????#?計(jì)算縮進(jìn)空格數(shù)
????leading?=?‘%s‘?%?‘?‘*indent
????#?循環(huán)打印每行16進(jìn)制數(shù)據(jù)
????for?x?in?range(0?len(buffer)?line_size):
????????#?打印縮進(jìn)字符和當(dāng)前行數(shù)據(jù)的起始地址
????????print(‘%s%04X:?‘?%?(leading?x)?end=‘‘)
????????#?將當(dāng)前行數(shù)據(jù)制作成列表list,并打印
????????line?=?[‘%02x‘?%?i?for?i?in?buffer[x:x+line_size]]
????????print(*line?sep=sep?end=‘\n‘)
#?加密函數(shù)
def?encrypt(src_file_name?dst_file_name?public_key_file_name):
????“““
????對(duì)原始數(shù)據(jù)文件使用指定的公鑰進(jìn)行加密,并將加密輸出到目標(biāo)文件中
????:param?src_file_name:?原始數(shù)據(jù)文件
????:param?dst_file_name:?加密輸出文件
????:param?public_key_file_name:?用于加密的公鑰
????:return:?加密結(jié)果的bytes數(shù)組
????“““
????#?讀取原始數(shù)據(jù)
????data_file?=?open(src_file_name?‘rb‘)
????data?=?data_file.read()
????data_file.close()
????#?讀取公鑰數(shù)據(jù)
????key_file?=?open(public_key_file_name?‘rb‘)
????key_data?=?key_file.read()
????key_file.close()
????#?從公鑰數(shù)據(jù)中加載公鑰?
????public_key?=?serialization.load_pem_public_key(
????????key_data
????????backend=default_backend()
????????)
????#?使用公鑰對(duì)原始數(shù)據(jù)進(jìn)行加密,使用PKCS#1?v1.5的填充方式
????out_data?=?public_key.encrypt(
????????data
????????padding.PKCS1v15()
????)
????#?將加密結(jié)果輸出到目標(biāo)文件中
????#?write?encrypted?data
????out_data_file?=?open(dst_file_name?‘wb‘)
????out_data_file.write(out_data)
????out_data_file.close()
????#?返回加密結(jié)果
????return?out_data
#?解密函數(shù)
def?decrypt(src_file_name?dst_file_name?private_key_file_name):
????“““
????對(duì)原始數(shù)據(jù)文件使用指定的私鑰進(jìn)行解密,并將結(jié)果輸出到目標(biāo)文件中
????:param?src_file_name:?原始數(shù)據(jù)文件
????:param?dst_file_name:?解密輸出文件
????:param?private_key_file_name:?用于解密的私鑰
????:return:?解密結(jié)果的bytes數(shù)組
????“““
????#?讀取原始數(shù)據(jù)
????data_file?=?open(src_file_name?‘rb‘)
????data?=?data_file.read()
????data_file.close()
????#?讀取私鑰數(shù)據(jù)
????key_file?=?open(private_key_file_name?‘rb‘)
????key_data?=?key_file.read()
????key_file.close()
????#?從私鑰數(shù)據(jù)中加載私鑰
????private_key?=?serialization.load_pem_private_key(
????????key_data
????????password=None
????????backend=default_backend()
????)
????#?使用私鑰對(duì)數(shù)據(jù)進(jìn)行解密,使用PKCS#1?v1.5的填充方式
????out_data?=?private_key.decrypt(
????????data
????????padding.PKCS1v15()
????)
????#?將解密結(jié)果輸出到目標(biāo)文件中
????out_data_file?=?open(dst_file_name?‘wb‘)
????out_data_file.write(out_data)
????out_data_file.close()
????#?返回解密結(jié)果
????return?out_data
if?__name__?==?“__main__“:
????#data_file_name?=?r‘msg.bin‘
????data_file_name?=?r‘msg.txt‘
????encrypted_file_name?=?r‘msg.bin.encrypted‘
????decrypted_file_name?=?r‘msg.bin.decrypted‘
????private_key_file_name?=?r
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????67646??2018-03-11?20:04??python3?+?wxpython?實(shí)現(xiàn)RSA加密聊天室\ico.ico
?????文件???????4239??2018-05-16?09:55??python3?+?wxpython?實(shí)現(xiàn)RSA加密聊天室\rsa-enc-dec.py
?????文件?????160756??2018-05-16?14:07??python3?+?wxpython?實(shí)現(xiàn)RSA加密聊天室\抓包.pcapng
?????文件??????10547??2018-05-16?12:59??python3?+?wxpython?實(shí)現(xiàn)RSA加密聊天室\聊天室-Python27.py
?????文件??????11918??2018-05-16?12:52??python3?+?wxpython?實(shí)現(xiàn)RSA加密聊天室\聊天室-Python36.py
?????文件???13778675??2018-05-16?14:12??python3?+?wxpython?實(shí)現(xiàn)RSA加密聊天室\聊天室工具?x86_x64.exe
?????文件??????17122??2018-08-02?17:35??python3?+?wxpython?實(shí)現(xiàn)RSA加密聊天室\聊天室工具.py
?????目錄??????????0??2018-08-02?17:36??python3?+?wxpython?實(shí)現(xiàn)RSA加密聊天室
-----------?---------??----------?-----??----
?????????????14050903????????????????????8
評(píng)論
共有 條評(píng)論