目录
《密码学》课程设计实验报告 1
实验序号:08 实验项目名称:密码学综合实验 1
程序使用说明: 4
以下为单机情况进行半双工通信为例: 进入到可执行文件的文件夹, 4
六、SM4 15
其他 18
一、 运行速度 18
二、 程序占用空间 18
三、 安全功能 19
四、 算法扩展性 19
一、 实验目的及要求
教学目的:
(1)熟悉适合密码应用的领域及应用方法;
(2)掌握一种密码应用技术。实验要求:
(1)掌握对称算法的实现;
(2)掌握非对称算法的实现;
(3)实现下列密码学的一种(或多种)应用:
计算机文件加密
通信加密
认证
签名
密钥管理
(4)掌握加密、签名、认证、密钥管理等技术的综合运用。
二、实验设备(环境)及要求
Windows 10 64 位
Python 3.6.1
GUI 库:wxpython
三、实验内容与步骤
作品名称:基于通信加密的文字文件传输系统
简介:本软件是基于通信加密的文字文件传输软件,实现了接收端、发送端二合一,可在网络内(1)实现全双工通信(2)。通信加密使用公开加密算法协商单次会话使用的分组密码密钥,使用分组密码进行加密通信,可自定义公开加密算法的相关参数,并设计了一套简单的通信协议及包格式,以校验发送的加密数据的完整性。
注:(1) 可在两台主机都具有公网 ip 时,或是在同一无 NAT 端口映射的局域网时进行全双工通信。 本文转载自http://www.biyezuopin.vip/onews.asp?id=15591
(2)若发送端和接收端在同一台主机上工作时,由于端口的唯一性,应用程序与端口绑定,故只能实现半双工通信。
# coding=utf-8
import wx
import wx.xrc
import communication
import threading
# 消息队列
msg_queue = []
# GUI 界面
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"加密传输系统 by xxg", pos=wx.DefaultPosition,
size=wx.Size(440, 600), style=wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL, name=u"Main")
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
self.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNTEXT))
self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))
bSizer1 = wx.BoxSizer(wx.VERTICAL)
# 监听 & 连接按钮
fgSizer0 = wx.FlexGridSizer(0, 2, 0, 0)
fgSizer0.SetFlexibleDirection(wx.BOTH)
fgSizer0.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.m_button_listen = wx.Button(self, wx.ID_ANY, u"监听", wx.DefaultPosition, wx.DefaultSize, 0)
fgSizer0.Add(self.m_button_listen, 0, wx.ALL, 5)
self.m_button_connect = wx.Button(self, wx.ID_ANY, u"连接", wx.DefaultPosition, wx.DefaultSize, 0)
fgSizer0.Add(self.m_button_connect, 0, wx.ALL, 5)
bSizer1.Add(fgSizer0, 0, wx.EXPAND, 5)
# 消息框
fgSizer5 = wx.FlexGridSizer(0, 1, 0, 0)
fgSizer5.SetFlexibleDirection(wx.BOTH)
fgSizer5.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.area_text = wx.TextCtrl(self, -1, u'连接尚未建立,按以下键继续操作\n监听: 等待连接\n连接: 连接目标主机', size=(400, 380),
style=(wx.TE_MULTILINE | wx.TE_DONTWRAP))
self.area_text.SetInsertionPoint(0)
fgSizer5.Add(self.area_text, 0, wx.ALL, 5)
bSizer1.Add(fgSizer5, 0, wx.EXPAND, 5)
# File Select
fgSizer2 = wx.FlexGridSizer(0, 2, 0, 0)
fgSizer2.SetFlexibleDirection(wx.BOTH)
fgSizer2.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.m_staticText3 = wx.StaticText(self, wx.ID_ANY, u"发送文件", wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText3.Wrap(-1)
self.m_staticText3.SetFont(wx.Font(wx.NORMAL_FONT.GetPointSize(), 70, 90, 90, False, wx.EmptyString))
fgSizer2.Add(self.m_staticText3, 0, wx.ALL, 5)
self.m_filePicker1 = wx.FilePickerCtrl(self, wx.ID_ANY, wx.EmptyString, u"Select a file", u"*.*",
wx.DefaultPosition, wx.Size(300, -1),
wx.FLP_DEFAULT_STYLE | wx.FLP_SMALL)
fgSizer2.Add(self.m_filePicker1, 0, wx.ALL, 5)
bSizer1.Add(fgSizer2, 0, wx.EXPAND, 5)
# 文本输入框及发送按钮
fgSizer4 = wx.FlexGridSizer(0, 2, 0, 0)
fgSizer4.SetFlexibleDirection(wx.BOTH)
fgSizer4.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.senf_text = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.Point(-1, -1), wx.Size(300, 80), style=(wx.TE_MULTILINE | wx.TE_DONTWRAP))
self.input_str = self.senf_text.GetValue()
fgSizer4.Add(self.senf_text, 0, wx.ALL, 5)
self.m_button_send = wx.Button(self, wx.ID_ANY, u"发送", wx.DefaultPosition, wx.DefaultSize, 0)
fgSizer4.Add(self.m_button_send, 0, wx.ALL, 5)
bSizer1.Add(fgSizer4, 0, wx.EXPAND, 5)
# End
self.SetSizer(bSizer1)
self.Layout()
self.Centre(wx.BOTH)
self.m_button_listen.Bind(wx.EVT_BUTTON, self.m_button_listen_OnButtonClick)
self.m_button_connect.Bind(wx.EVT_BUTTON, self.m_button_connect_OnButtonClick)
self.m_button_send.Bind(wx.EVT_BUTTON, self.m_button_send_OnButtonClick)
def __del__(self):
pass
# 监听按钮事件,开启监听线程
def m_button_listen_OnButtonClick(self, event):
listen_thread = threading.Thread(target=self.listen_thread)
listen_thread.start()
# 连接按钮事件,开启连接线程
def m_button_connect_OnButtonClick(self, event):
connect_thread = threading.Thread(target=self.connect_thread)
connect_thread.start()
pass
# 发送按钮事件,发送文字或文件
def m_button_send_OnButtonClick(self, event):
try:
text = self.senf_text.GetValue()
if text != '':
msg_queue.append("Sending text: %s\n" % text)
self.connect.send_string(text)
self.senf_text.Clear()
f_path = self.m_filePicker1.GetPath()
if f_path != '':
msg_queue.append("Sending file: %s\n" % f_path)
self.connect.send_file(f_path)
self.m_filePicker1.Refresh()
except Exception as e:
print("Send Fail")
print(e)
msg_queue.append("\n发送失败,连接尚未建立或已经断开,请重新建立连接\n")
# 监听线程
def listen_thread(self):
self.listen = communication.Communication(mode='LISTEN', msg_queue=msg_queue)
self.listen.listen_manager()
# 连接线程
def connect_thread(self):
self.connect = communication.Communication(mode='CONNECT', msg_queue=msg_queue)
# 显示结果线程
def disp_text(self):
self.area_text.Clear()
msg_queue.append("连接尚未建立,按以下键继续操作\n监听: 等待连接\n连接: 连接目标主机\n")
while True:
if len(msg_queue) != 0:
self.area_text.AppendText(msg_queue.pop(0))
# 开启显示结果线程
def disp_text_begin(self):
disp_text = threading.Thread(target=self.disp_text)
disp_text.start()
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame(None)
frame.Show(True)
frame.disp_text_begin()
app.MainLoop()
本文含有隐藏内容,请 开通VIP 后查看