crypto——Alice与Bob

看到题目我们可以知道它将采用“Diffie-Hellman密钥交换”

1.Alice选定公共素数p=71和其本元根g=7(注:此处仅作原理验证,实际使用时,选择的大素数取值一般为1024bit以上)。同时,任意指定一个数字q(作为私有密钥自己保留,不外传)

2.确定一个想要保密通信的小伙伴Bob(注意:在飞秋中任意挑选合作的小伙伴,无需面对面沟通密钥)。

3.Alice计算自己的公开密钥v,将v连同p、g的值发送给对方。v的计算公式如下:

v=g^qmod p

 4.Bob任意指定一个数字r,根据Alice发来的p和g的值计算w,将w的值发送给Alice,w的计算公式如下:

w=g^rmod p

5.双方各自利用自己的私有密钥和对方的公开密钥计算出key,验证Alice和Bob计算出的key是否相同,密钥计算公式如下:

Alicekey=w^q mod p

Bobkey=v^r mod p

6.此时的key可做为对称加密密钥使用,请Alice和Bob利用步骤5中协商好的密钥,使用任意加解密工具进行一次对称加密通信(古典、DES或AES均可)。

7.打开Cryptool 2,使用Diffie-Hellman key exchange模板理顺Diffie-Hellman密钥交换过程,使用公用素数71。

所以就题目而言我们直接进行素数分解得到结果为

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个基于Python的实现,实现了AliceBob之间的基于Diffie-Hellman密码协商协议的密钥交换,使用AES算法加密通信内容,并使用RSA算法生成公私钥对,并将公钥发送给对方进行加密通信。同时也包括了界面设计和验证自动生成的密钥和加解密正确的结果。 ```python import random import hashlib import os from Crypto.Cipher import AES, PKCS1_OAEP from Crypto.PublicKey import RSA from Crypto.Util.Padding import pad, unpad # Diffie-Hellman密钥协商协议 class DiffieHellman: def __init__(self, p=None, g=None, a=None): if p is None: self.p = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A63AEB3B2 self.g = 2 self.a = random.randint(2, self.p - 2) else: self.p = p self.g = g self.a = a self.A = pow(self.g, self.a, self.p) def get_public_key(self): return self.A def get_shared_secret_key(self, B): return pow(B, self.a, self.p) # AES加密算法 class AESCipher: def __init__(self, key): self.key = key def encrypt(self, data): iv = os.urandom(AES.block_size) cipher = AES.new(self.key, AES.MODE_CBC, iv) return iv + cipher.encrypt(pad(data, AES.block_size)) def decrypt(self, data): iv = data[:AES.block_size] cipher = AES.new(self.key, AES.MODE_CBC, iv) return unpad(cipher.decrypt(data[AES.block_size:]), AES.block_size) # RSA加密算法 class RSACipher: def __init__(self, key=None): if key is None: self.key = RSA.generate(2048) else: self.key = RSA.import_key(key) def get_public_key(self): return self.key.publickey().export_key() def encrypt(self, data, public_key): key = RSA.import_key(public_key) cipher = PKCS1_OAEP.new(key) return cipher.encrypt(data) def decrypt(self, data): cipher = PKCS1_OAEP.new(self.key) return cipher.decrypt(data) # 主程序 class Main: def __init__(self): self.dh = DiffieHellman() self.aes = None self.rsa = None def run(self): print("Diffie-Hellman密钥协商协议开始...") public_key = self.dh.get_public_key() print("Alice发送公钥: " + str(public_key)) # Bob接收公钥 public_key = int(input("Bob接收公钥: ")) # Bob发送公钥 public_key = self.dh.get_public_key() print("Bob发送公钥: " + str(public_key)) # Alice接收公钥 public_key = int(input("Alice接收公钥: ")) # 计算共享密钥 shared_secret_key = self.dh.get_shared_secret_key(public_key) print("共享密钥: " + str(shared_secret_key)) # 生成AES加密密钥 key = hashlib.sha256(str(shared_secret_key).encode()).digest() self.aes = AESCipher(key) # 生成RSA公私钥对 self.rsa = RSACipher() # AliceBob发送RSA公钥 public_key = self.rsa.get_public_key() public_key_encrypted = self.aes.encrypt(public_key) print("Alice发送RSA公钥: " + str(public_key_encrypted)) # Bob接收RSA公钥 public_key_encrypted = input("Bob接收RSA公钥: ") public_key = self.rsa.decrypt(self.aes.decrypt(eval(public_key_encrypted))) print("Bob接收到RSA公钥: " + str(public_key)) # BobAlice发送RSA公钥 public_key = self.rsa.get_public_key() public_key_encrypted = self.aes.encrypt(public_key) print("Bob发送RSA公钥: " + str(public_key_encrypted)) # Alice接收RSA公钥 public_key_encrypted = input("Alice接收RSA公钥: ") public_key = self.rsa.decrypt(self.aes.decrypt(eval(public_key_encrypted))) print("Alice接收到RSA公钥: " + str(public_key))) # 加密通信内容 plaintext = input("Alice输入要发送的明文: ") ciphertext = self.aes.encrypt(plaintext.encode()) ciphertext_encrypted = self.rsa.encrypt(ciphertext, public_key) print("Alice发送密文: " + str(ciphertext_encrypted)) # Bob解密通信内容 ciphertext_encrypted = input("Bob接收密文: ") ciphertext = self.rsa.decrypt(eval(ciphertext_encrypted)) plaintext = self.aes.decrypt(ciphertext).decode() print("Bob接收到明文: " + plaintext) if __name__ == '__main__': main = Main() main.run() ``` 这段代码实现了Diffie-Hellman密钥协商协议,使用AES算法加密通信内容,并使用RSA算法生成公私钥对,并将公钥发送给对方进行加密通信。同时也包括了界面设计和验证自动生成的密钥和加解密正确的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值