其他分享
首页 > 其他分享> > 背包密码体制

背包密码体制

作者:互联网

背包问题介绍:

给定一些物体,每个物体有不同的重量,是否有可能将这些物体放入一个背包,使背包的重量等于一个给定的值。

举例:

这些物体的重量分别为1,5,6,11,14,20,则可将重5,6,11的物体放入,装成一个重22的背包。但是无法装成一个重24的背包。

基本原理

首先,背包算法用于信息安全(密码法),我们总得搞清楚什么是明文,密文,密钥吧?!

举例:

明文: 1  1  1  0  0  1     0  1  0  1  1  0      0  1  1  0  0  0  

密钥: 1  5  6  11  14  20   1  5  6  11  14  20    1  5  6  11  14  20

密文: 1+5+6+20=32      5+11+14=30       5+6=11

从上面可以总结:

算法安全性体现为:

若攻击者获得密文、密钥,也无法在线性时间内求明文(物品的装入情况)

算法的关键

 

算法的关键是有两个不同的背包重量序列,这两个重量序列对于给定的相同的值,解相同(物品的装入情况相同)

前者物品的重量列表是递增的,后者则是无序的

前者可以解密,看下面~~

1、构造递增序列背包

易解的背包问题:若物品的重量列表为一个超递增序列,则该背包问题很容易解的。

比如递增序列:1  3  6  13  27  52

 

 举例:

 

如何构造公钥呢?

2、从私钥构造公钥

 

 经过上面的计算,序列为:{62  93  81  88  102  37}作为公钥

 3、加密

 4、解密

 

解密这里我遇到一个问题:如何求n-1,即如何求n关于模m的逆元??(注意:这里必须搞懂,不然下一篇博客RSA算法就肯定不懂的!)

我百度找了好多,也看了别了的博客,比如http://blog.sina.com.cn/s/blog_65a5cf5e0100nyqo.html,但我看不懂啊!!终于我找到了一个我能看懂的求逆元方法<辗转相除法求模的逆元>!(已经编程实现),下篇博客会发出来~~

为了方便我整理,我把求逆元相关的过程截图出来,大家也可以点链接去看~  ending~

 

 

 

 

转载于https://www.cnblogs.com/zhangyubao/p/6973836.html

标签:11,背包,装入,物体,体制,密码,算法,序列
来源: https://www.cnblogs.com/xleeje/p/15521034.html