实验要求
实验目的
设计并编程实现一个通信模型,要求实现保密性、完整性、身份鉴别。
实验要求
- 编写一个发送端程序和一个接收端程序,接收端完成对消息的验证和解密。
- 用DES的ECB模式完成对信件内容的加密。
- 用RSA对上面的对称密钥进行加密,实现会话密钥交换
要求:大素数p、q至少均大于10^10 - 添加消息认证码:保证信件数据的完整性(散列函数:SHA-1)
- 对消息认证码用RSA进行数字签名
要求:大素数p、q至少均大于1010
代码
Send.py
import socket
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
import Crypto.Hash.SHA512
from Crypto.Hash import SHA
import base64
from pyDes import *
import rsa
import binascii
# DES加密:
KEY_ODES = b'\x57\x69\x6C\x6C\x69\x61\x6D\x53'
# KEY_DES=bytes(int(KEY_ODES))
def des_encrypt(message):
k = des(KEY_ODES, ECB, None, None, PAD_PKCS5)
Encrypt_des = k.encrypt(message)
return binascii.b2a_hex(Encrypt_des)
#RSA加密
# 用公钥加密,并用Base64编码后输出
def rsa_encrypt(deskey,pubkey):
crypto = rsa.encrypt(deskey, pubkey)
rsa_deskey = base64.b64encode(crypto)
return rsa_deskey
# 签名
# plaintext:string,被签名信息
# keyPath:私钥路径
# 返回:base64的签名输出
def rsa_sign(plaintext, keyPath):
# 读私钥
with open(keyPath) as f:
key_rsa = f.read()
# 实例验名对象
signer = PKCS1_v1_5.new(RSA.importKey(key_rsa))
# 将被签名信息以SHA算法进行哈希转换
hash_value = SHA.new(plaintext.encode('utf-8'))
# 签名
sign