AB公私钥的生成

生成Alice和Bob的公私钥,保存为pem格式的文件

save_private_key(private_key, 'Aprivate_key.pem')
save_public_key(public_key, 'Apublic_key.pem')

seed = os.urandom(32)  # 使用随机的字节串作为种子
private_key, public_key = generate_rsa_key_pair(seed)

# 保存私钥和公钥到文件中
save_private_key(private_key, 'Bprivate_key.pem')
save_public_key(public_key, 'Bpublic_key.pem')
def load_private_key(private_key_path):
    with open(private_key_path, "rb") as key_file:
        private_key = serialization.load_pem_private_key(
            key_file.read(),
            password=None,
            backend=default_backend()
        )
    return private_key

# 加载公钥
def load_public_key(public_key_path):
    with open(public_key_path, "rb") as key_file:
        public_key = serialization.load_pem_public_key(
            key_file.read(),
            backend=default_backend()
        )
    return public_key

# 使用对方的公钥加密对称密钥
def encrypt_symmetric_key(public_key, symmetric_key):
    encrypted_key = public_key.encrypt(
        symmetric_key,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    return encrypted_key

# 生成对称密钥
def generate_symmetric_key():
    # 这里简单地使用一个固定长度的随机字节序列作为对称密钥
    # 实际应用中,应该使用安全的随机数生成器来生成对称密钥
    symmetric_key = b'\x00' * 32  # 32字节对称密钥
    return symmetric_key

# 从RSA密钥对中生成共享密钥
def generate_shared_key(private_key, peer_public_key):
    symmetric_key = generate_symmetric_key()
    encrypted_key = encrypt_symmetric_key(peer_public_key, symmetric_key)
    return symmetric_key, encrypted_key

# 加载Alice和Bob的私钥和公钥
Aprivate_key = load_private_key("Aprivate_key.pem")
Apublic_key = load_public_key("Apublic_key.pem")

Bprivate_key = load_private_key("Bprivate_key.pem")
Bpublic_key = load_public_key("Bpublic_key.pem")

# 使用Alice的私钥和Bob的公钥生成共享密钥
shared_key_A, encrypted_key_A = generate_shared_key(Aprivate_key, Bpublic_key)

# 使用Bob的私钥和Alice的公钥生成共享密钥
shared_key_B, encrypted_key_B = generate_shared_key(Bprivate_key, Apublic_key)
print(Apublic_key)
print(Bpublic_key)
print("Alice的共享密钥:", shared_key_A)
print("Bob的共享密钥:", shared_key_B)

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值