1. Alice和Bob使用DES/AES算法加密通信内容 2. Alice和Bob利用Diffie-Hellman密码协商协议生成DES加密密钥k_(AB) 。 3. Alice使用RSA算法生成公私钥对,并将公钥发送给Bob 4. 设计好界面(不一定图形),可验证自动生成的密钥和加解密正确的结果。 5. RSA算法使用不小于1024比特的模数N。 6. 不要求双方真正建立通信信道,但是鼓励有余力的同学采用Socket编程建立Alice和Bob的通信连接。 7. 全程调用Python相关库实现即可(有余力的同学可以尝试自己编程实现密码算法。素数生成过程中可使用标准库,如gmp、BigInteger等)。python代码实现
时间: 2023-12-03 07:46:13 浏览: 324
以下是一个简单的Python代码实现,包括Diffie-Hellman密码协商、DES加密和RSA加密。请注意,这个实现只是为了演示目的,不应该在实际应用中使用。
```python
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad
from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Util.number import bytes_to_long, long_to_bytes
import socket
# Diffie-Hellman密码协商
def dh_key_exchange(p, g, a, b):
A = pow(g, a, p)
B = pow(g, b, p)
s = pow(B, a, p) # 或者 s = pow(A, b, p)
return s.to_bytes(8, byteorder='big')
# DES加密
def des_encrypt(key, plaintext):
cipher = DES.new(key, DES.MODE_ECB)
padded_plaintext = pad(plaintext.encode(), DES.block_size)
ciphertext = cipher.encrypt(padded_plaintext)
return ciphertext
# DES解密
def des_decrypt(key, ciphertext):
cipher = DES.new(key, DES.MODE_ECB)
padded_plaintext = cipher.decrypt(ciphertext)
plaintext = unpad(padded_plaintext, DES.block_size).decode()
return plaintext
# RSA加密
def rsa_encrypt(public_key, plaintext):
message = bytes_to_long(plaintext.encode())
ciphertext = pow(message, public_key.e, public_key.n)
return long_to_bytes(ciphertext)
# RSA解密
def rsa_decrypt(private_key, ciphertext):
message = bytes_to_long(ciphertext)
plaintext = pow(message, private_key.d, private_key.n)
return long_to_bytes(plaintext).decode()
# 生成随机数作为私钥
private_key = get_random_bytes(8)
# Diffie-Hellman密码协商
p = 37
g = 5
a = 6 # Alice的私钥
b = 15 # Bob的私钥
shared_key = dh_key_exchange(p, g, a, b)
# 用共享密钥加密消息
message = 'Hello, Bob!'
encrypted_message = des_encrypt(shared_key, message)
# RSA加密私钥
key = RSA.generate(1024)
public_key = key.publickey()
encrypted_private_key = rsa_encrypt(public_key, private_key)
# 发送加密的私钥和加密的消息
s = socket.socket()
host = socket.gethostname()
port = 12345
s.bind((host, port))
s.listen(1)
print('Waiting for connection...')
conn, addr = s.accept()
print(f'Connected by {addr}')
conn.send(encrypted_private_key)
conn.send(encrypted_message)
# 接收加密的私钥和加密的消息
encrypted_private_key = conn.recv(1024)
encrypted_message = conn.recv(1024)
# RSA解密私钥
private_key = rsa_decrypt(key, encrypted_private_key)
# Diffie-Hellman密码协商
shared_key = dh_key_exchange(p, g, a, b)
# 用共享密钥解密消息
message = des_decrypt(shared_key, encrypted_message)
print(f'Message received: {message}')
conn.close()
```
阅读全文