公钥密码体制是Diffie和Hellman1976年提出的,1978年,背包密码体制作为第一个公钥密码体制由Merkle和Hellman1978年提出。虽然在两年后,该体制就被破译,但作为第一个公钥密码体制,还是有着划时代的意义。接下来我们来看它的解密以及破译思想和过程。

我们仍取上一篇的例题来进行分析,向量背包和加密过程可以看上一篇博客:https://blog.csdn.net/Taotaoboke/article/details/109258587

一、解密

我们直接引用上一篇的解密原理分析

解密运算为:

=(k+1)/t   ,求出t的逆元

sc mod k  ,求出背包容积,然后用贪婪算法求明文

解密唯一性分析:

c mod k   t  mod k  A  mod k,

而  ,得 < k ,所以 c mod k = 唯一

实现程序:

1)将公开钥用解密密钥还原回原来的超递增向量(这里的就是上面的A)

nt=(k+1)/t;
AX=zeros;
for i=1:lenAX(i)=mod(A(i)*nt,k);
end
AX

输出结果:AX =     1     3     5    11    21    44    87   175   349   701

2)将密文去掉模乘,得到超递增序列的背包容量S

BX=[2942,3584,903,3326,215,2817,2629,819]; %密文
S=zeros;     %去除模乘加密后的数组,即背包容量
BXlen=length(BX(:));
for i=1:BXlenS(i)=mod(nt*BX(i),k);   %对密文去除模乘
end
S

运行结果:S =   734   638    21   632     5   879   283    93

3)再用贪婪算法求得背包向量AX的对应二元序列

Bit=zeros; %二元序列数组
for i=1:BXlent=S(i);for j=1:lenif t>=AX(len+1-j)t=t-AX(len+1-j); %临时变量t,计算差值Bit(i,j)=1;elseBit(i,j)=0;endend
end
Bit

运行结果:

Bit =

1     0     0     0     0     1     1     0     0     1
     0     1     1     1     0     1     0     1     0     1
     0     0     0     0     0     1     0     0     0     0
     0     1     1     1     0     1     0     0     0     0
     0     0     0     0     0     0     0     1     0     0
     1     0     1     0     0     0     0     0     1     0
     0     0     1     1     0     1     0     0     0     0
     0     0     0     1     0     0     0     1     0     1

4)计算出二进制对应的十进制,将其作为下标,找到对应的字符。(这是因为我用的是数组存储的字符)

D=zeros(BXlen,2); %十进制数组
for i=1:BXlent1=0;t2=0;for j=1:lenif j>5if Bit(i,j)==1t2=t2+2^(j-6);D(i,1)=t2;endelseif Bit(i,j)==1t1=t1+2^(j-1);D(i,2)=t1 ;endendend
end
DL=size(D,1);
m='';  %明文
for i=1:DLot=[ALP(D(i,1)+1),ALP(D(i,2)+1)];m=[m,ot];
end
m

运行结果:m =    'SAUNA AND HEALTH'

二、破译

破译的基本思想是不必找出正确的模数k和乘数t(即陷门信息)只需要找到出任意模数和乘数,然后用对公开的背包向量求出新的超递增向量即可。

数学原理:已知,设有一个新的超递增向量A

找到一组模数和乘数,满足

则  

,得,所以唯一

又解密过程可得唯一,

(注:只是与的对应关系相等,不是真正意义上的相等)

实现程序:

1)因为懒得再写模乘后的向量B,所以直接对A进行模乘,求得B。然后遍历B,求出B序列中突然减小的元素(既然是超递增序列求模k,那模k必定满足 < k < +

A=[1,3,5,11,21,44,87,175,349,701]; %背包向量
B=zeros;
len=length(A(:));
ALP=[' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];%定义字母表
%% 对背包向量加密(模乘),并求破解的模数PK的取值范围
for i=1:lenB(i)=mod(43*A(i),1590); %模乘中取模数k=1590,乘数t=43,得公开钥Bif i>=2&&B(i) < B(i-1)PKh=B(i-1)+B(i); %k值上限PKl=B(i-1);               %k值下限end
end
B

运行结果:B =          43         129         215         473         903         302         561        1165         697        1523

2)求满足的和以及

AA=zeros;
t=0;
NS=1; %破解状态
FA=1; %寻找超递增向量,找不到为0
k=PKh;
while NS && FAsum=0;t=t+1;AA(1)=mod(B(1)*t,k);for i=2:lenAA(i)=mod(B(i)*t,k);sum=sum+AA(i-1);if sum>=AA(i)   %判断是否为超递增序列sum;break;elseif i==lenktAANS=0;endendif k>PKl && t >=k  %判断能否找到超递增序列k=k-1;t=0;elseif k<=PKlFA=0;end
end

运行结果:k =  1848           t = 43                       AA =     1     3     5    11    21    50    99   199   403   809

3)再用上面的解密程序解密即可,这里不再附程序,运行结果与解密结果一致。

闲话:

新手上路,希望能帮到正在学习密码学的同学。同时,也希望各方大佬能给出宝贵的意见。感谢!!!

背包问题的解密及破解相关推荐

  1. 仿射密码之加解密及破解

    [题目] 1) 实现仿射密码,具体要求: A. 实现仿射密码加密过程,由用户输入密钥,可以对任意输入的明文进行加密: B. 根据用户输入的加密密钥,自动生成解密密钥,并能对加密密文进行解密: C. 实 ...

  2. 凯撒密码加解密及破解实现原理

    概念及原理 根据百度百科上的解释,凯撒密码是一种古老的加密算法. 密码的使用最早可以追溯到古罗马时期,<高卢战记>有描述恺撒曾经使用密码来传递信息,即所谓的"恺撒密码" ...

  3. 维吉尼亚密码加解密与破解

    实验目的 1.进一步理解维吉尼亚密码的加解密原理 2.进一步理解维吉尼亚密码的缺陷和利用方法 3.提高编程实践能力 实验要求 1.实现维吉尼亚加解密函数 2.破解维吉尼亚加密的密文 实验步骤 1.维吉 ...

  4. 汽车安全大赛中一道zip压缩包解密题破解

    在一次汽车安全大赛中,遇到一个压缩包解密的题目,压缩包文件如下 初步分析发现car.pcapng,未加密可以直接解压处出,图片文件需要密码才能解开,并给出图片采用了隐写术.wireshark打开car ...

  5. AT89C51SND2单片机解密与破解

    芯片解密研究所长期提供MICROCHIP单片机.SYNCMOS单片机.ALTERA单片机. ATMEL单片机.VERSACHIPS单片机.HITACHI单片机.NXP单片机.EMC单片机.DALLAS ...

  6. 加脱壳、加解密、破解辅助及其源码

    PE辅助工具 程序名称 作者 说明 PETool v0.45 beta MackT PE文件信息查看编辑工具,VC源码. PE Labs 1.0 Latigo PE文件信息查看工具,Win32ASM源 ...

  7. Sql存储过程加密和解密

    可用于加密SQL存储过程或者触发器(这是SQL Server本身提供的,也就是说这是微软的加密算法) http://www.mscto.com 使用 WITH ENCRYPTION 选项 WITH E ...

  8. 实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!

    来源/早起Python 本文将分享如何利用 Python 对 PDF 进行加密和解密操作,主要利用到之前多次介绍过的PyPDF2 模块. PDF 加密 在之前的文章PDF合并.拆分.水印.加密中简单提 ...

  9. 账号密码忘了不要慌,教你用Python自动解密解码,轻松获取!

    前些天突然想进一个网站,但是太久没登录,密码早就忘了,于是想到Python 的一款神器Ciphey,三下五除二就把密码找回来了! Ciphey 是一个使用自然语言处理和人工智能的全自动解密/解码/破解 ...

最新文章

  1. android studio 多dex,AndroidStudio利用android-support-multidex解决64k的各种异常
  2. C++ unique
  3. 一次MYSQL 服务器性能优化之旅
  4. STM32涨价?那就用国产32替代吧!
  5. 切记!构造函数里面别一定不要初始化其他类,踩过坑的都知道
  6. 一台电脑,内外网同时使用
  7. 地址管理和子网划分基础
  8. Codeforces Round #716 (Div. 2), B. AND 0, Sum Big, 快速幂结论题
  9. 2022年使用的最佳Javascript库
  10. IOS开发之——数据库-Couchbase(05)
  11. Webmagic爬虫框架
  12. android 计时器工具类,Android实现计时器功能
  13. java9 javascript_[Java教程]9最好的JavaScript压缩工具
  14. SysKey 和 SAM
  15. vscode+CRA+TypeScript+eslint+prettier+stylelint+husky+lint-staged完整版配置
  16. 注册服务号、订阅号流程
  17. python中aorb是什么意思_Python--AB测试应用分析
  18. 行内元素和块元素的区别
  19. GPRS电力远程自动抄表系统解决方案
  20. Dubbo 2 Dubbo 概述 2.1 Dubbo 概念 2.2 Dubbo 架构

热门文章

  1. Making Decisions(Chapter 6 of Programming in Objective-C 2.0)
  2. MySQL数据库快捷键
  3. 新手入门常见问题--下载第三方库及查看
  4. ArcGIS学习14:基于OD方法的网络节点关系分析
  5. 极品飞车9重制版,剧情到,车子抛锚,选第一辆车,就闪退,终于解决了
  6. 分享了一篇文章:《格子出位nbsp;要你好看》
  7. 掌财社:马桶MT被山寨,聊天宝赚钱不如捡废品,多闪表现平平
  8. 深度分析:摩尔定律失效可能会影响全球经济
  9. oracle清理aud问来哦,oracle 審計日志清理
  10. 一步步学习微软InfoPath2010和SP2010--第五章节--添加逻辑和规则到表单(6)--使用规则创建多视图样式向导表单