背包密码体制原理大白话讲解及Python实现

一、背包密码体制介绍

提到背包密码体制,我们首先就想到为什么这个密码体制和背包有什么关系,背包二字的由来是因为在1978年Merkle与Hellman提出的MH背包问题,这个问题的总体思路是这样的,现在有许多不同重量的物体,从中可以任意选择n件物品放入背包。披露背包中物品的总重量和物品堆;但是所选项目的类型不是公开的。针对这种问题Merkle与Hellman合作设计了一种使用背包问题对信息进行加密的方法,因为该加密算法涉及到背包问题,所以背包密码因此得名。

二、背包加密算法原理

背包加密算法的总体思路是这样的,假如A想发送一条信息,A首先要具有私钥,并且该密钥是通过背包问题传递的,该私钥可以生产一个公钥,发送消息之前必须先使用公钥进行加密,消息的合法接收者使用私钥等已知信息进行解密,这就是背包加密算法的总体思路。

三、背包加密算法步骤

3.1 构造递增序列背包

在背包问题当中,若物品的重量列表是一个超递增序列,这个问题是很容易的出答案的,解决超递增序列的背包问题主要有以下几个步骤:假如有一个背包,背包的重量已知,将这个背包的重量与我们已知的超递增序列中的最大值进行比较,如果背包的重量小于这个数,那么这个数不在背包中,如果重量大于或等于这个数,那么这个数在背包中,用背包的重量减去这个数,得出的结果继续与序列中的下一个数进行比较,重复比较直到比较完为止。如果背包的总重量减到0则该背包问题得出解,反之则无解。

3.2 以私钥为基础构造公钥

3.3 使用公钥进行加密

通过以私钥为基础构造公钥,此时当我们拿到公钥的时候,我们开始使用公钥进行加密数据,假如我们拿到一个二进制的数据011000110101101110,背包加密算法对该二进制数据加密的主要流程是:

3.4 解密

四、背包密码体制Python实现

4.1 以私钥构造公钥

def create_pubkey(data):

    # 构造m   此时m应大于超递增序列的所有和
    # m = sum(data) + 2
    # m = 250
    m =<
  • 21
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值