首页 > 其他分享 >背包加密

背包加密

时间:2023-01-14 17:00:33浏览次数:58  
标签:11 背包 20 14 110 加密 mod

背包加密算法

背包加密算法是第一个通用公钥加密算法。

它是由Ralph Merkle 和 Mertin Hellman 于1978年开发的。由于它是公钥密码术,因此需要两个不同的密钥。一个是用于加密过程的公钥,另一个是用于解密过程的私钥。在此算法中,我们将解决两个不同的背包问题,其中一个很容易,而另一个则很困难。简易背包用作私钥,硬背包用作公钥。简易背包用于派生硬背包。

背包问题介绍

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

举例

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

总结:

  • 背包问题:等于一个给定的值。
  • 解为选择物品装入的情况,装入用1,未装入用0。例子中对给定值22的解为{0,1,1,1,0,0}。
  • 这个问题需要的时间随物体的数量的增加成指数时间。

基本原理

实例:

明文: 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/0的序列,而且明文长度等于物体的个数,表示从中选取物体装入背包
  • 密文为选取物体的质量和
  • 密钥为背包问题中物品重量序列

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

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

构造超递增序列背包

超递增序列:

比如:这样一个序列{1,3,5,11,22}就是超递增的,后面的数大于前面数的和,如:1+3<5,1+3+5<11,1+3+5+11<22

举例:

{1, 2, 4, 10, 20, 40} is a super increasing as
1<2, 1+2<4, 1+2+4<10, 1+2+4+10<20 and 1+2+4+10+20<40.
派生公钥:

背包算法先找到一个递增背包的重量序列作为私钥,再由此构造一个序列(有相同解的一般背包问题的序列)作为公钥

步骤一

选择超递增序列 {1, 2, 4, 10, 20, 40} 作为私钥

步骤二

选择两个数字n和m。将私钥的所有值乘以数字n,然后求模m。 m的值必须大于私钥中所有值的总和,数字n与m不应具有公因数。

此处示例 m=110,n=31

步骤三

使用m和n计算公钥值

1x31 mod(110) = 31
2x31 mod(110) = 62
4x31 mod(110) = 14
10x31 mod(110) = 90
20x31 mod(110) = 70
40x31 mod(110) = 30

因此,我们的 公钥为{31,62,14,90,70,30} 私钥是{1、2、4、10、20、40}

示例:

让我们的纯文本为100100111100101110

加密:

由于背包包含六个值,因此我们将纯文本分为六个组:

10010	111100	101110

将公钥的每个值与每个组的对应值相乘并求和。

100100  {31, 62, 14, 90, 70, 30}
1x31+0x62+0x14+1x90+0x70+0x30 = 121

111100  {31, 62, 14, 90, 70, 30}
1x31+1x62+1x14+1x90+0x70+0x30 = 197

101110  {31, 62, 14, 90, 70, 30}
1x31+0x62+1x14+1x90+1x70+0x30 = 205 

因此,我们的密文为121 197 205

解密:

接收者接收必须解密的密文。接收器还知道m和n的值。

因此,首先我们需要找到$$n^{-1}$$,它是 n mod m 的 乘法逆,即 $$n\cdot{n^{-1}}mod(m)=1$$

故计算 $$31\cdot{n^{-1}}mod(110)=1$$ 解得 $${n^{-1}}=71$$

python写法:

import gmpy2
n=31
m=110
n1=gmpy2.invert(n,m)
print(n1)

//n1=71

现在,我们必须将密文的每个块乘以71,然后乘以71。

121 x 71 mod(110) = 11 

然后,我们将必须根据私钥{1、2、4、10、20、40}的值得出11的总和,即1 + 10 = 11,因此使对应的位1和其他0为100100。

同样的,

197 x 71 mod(110) = 17
1+2+4+10=17 = 111100

205 x 71 mod(110) = 35
1+4+10+20=35 = 101110 

合并它们后,我们得到了解码后的文本。

100100111100101110这是我们的纯文本。

部分内容转载于
https://www.cnblogs.com/0zcl/p/6111686.html

https://www.imangodoc.com/167266.html

标签:11,背包,20,14,110,加密,mod
From: https://www.cnblogs.com/Mar10/p/17052066.html

相关文章

  • 动态规划笔记(二):背包问题(未整理完)
    背包问题0/1背包问题(HDU-2602)状态转移方程:\(dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i])\)递推#include<iostream>#include<algorithm>usingnam......
  • 这几类网站强烈建议启用 HTTPS 加密,以免信息泄露造成重大损失
    HTTPS其实是有两部分组成:HTTP+SSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。......
  • 前端Aes-128-ecb加密解密
    安装:npminstallcrypto-js  注意密码需要16位importutf8from'crypto-js/enc-utf8';importaesfrom'crypto-js/aes';importecbfrom'crypto-js/mode......
  • AEAD加密算法简介
    copyfrom:https://ez.analog.com/ez-blogs/b/engineerzone-spotlight/posts/authenticated-encryption如果仅仅加密,显然只能保证confidentiality,不能证明message是否被......
  • P8548小挖的买花(01背包双重限制之限制一个最大一个最小)
    P8548小挖的买花(双重限制之限制一个最大一个最小)MarkDown崩了我太菜不会改,大家还是去洛谷看原题吧题目传送门:小挖的买花题目背景小挖喜欢买花,但是ta太懒了!所以这个任......
  • 【加密与解密】第四章②
    4.条件指令设置条件指令的形式是SETccr/m8,其中r/M8是表示8位寄存器或者单字节内存单元。条件设置指令格局处理器定义的16种条件测试一些标志位。把结果记录到操作数当中......
  • 【加密与解密】第四章①
    通过分析汇编代码来理解其代码功能,然后用高级语言重新描述这段代码,逆向分析原始软件的思路,这就是逆向工程。32位软件逆向技术启动函数首先被执行的是启动函数的相关代码......
  • RSA非对称加密和MD5不可逆加密代码示例
    加密算法可以分为三大类:对称加密算法:DES 非对称加密算法: RSAHash算法: MD5登陆密码加密流程:web端用公钥加密密码,server端用私钥解码,将解出的明文用MD5加密......
  • SQL Server 2016 Always Encrypted(始终加密)
    AlwaysEncrypted功能旨在保护AzureSQLDatabase或SQLServer数据库中存储的敏感数据,如信用卡号或身份证号(例如美国社会安全号码)。始终加密允许客户端对客户端应用程......
  • 【加密与解密】第三章⑦
    其他功能1.图形化功能这种模式比文本模式的可视性更好,用户更容易看清函数的代码流程。通过空格切换文本模式或者图形化模式。2.修改可执行文件使用IDA可以直接修改二进......