背包问题的解密及破解
公钥密码体制是Diffie和Hellman1976年提出的,1978年,背包密码体制作为第一个公钥密码体制由Merkle和Hellman1978年提出。虽然在两年后,该体制就被破译,但作为第一个公钥密码体制,还是有着划时代的意义。接下来我们来看它的解密以及破译思想和过程。
我们仍取上一篇的例题来进行分析,向量背包和加密过程可以看上一篇博客:https://blog.csdn.net/Taotaoboke/article/details/109258587
一、解密
我们直接引用上一篇的解密原理分析
解密运算为:
=(k+1)/t ,求出t的逆元
sc mod k ,求出背包容积,然后用贪婪算法求明文
解密唯一性分析:
c mod k t A mod k A mod k,
而 ,得A < k ,所以 c mod k = A 唯一
实现程序:
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) 实现仿射密码,具体要求: A. 实现仿射密码加密过程,由用户输入密钥,可以对任意输入的明文进行加密: B. 根据用户输入的加密密钥,自动生成解密密钥,并能对加密密文进行解密: C. 实 ...
- 凯撒密码加解密及破解实现原理
概念及原理 根据百度百科上的解释,凯撒密码是一种古老的加密算法. 密码的使用最早可以追溯到古罗马时期,<高卢战记>有描述恺撒曾经使用密码来传递信息,即所谓的"恺撒密码" ...
- 维吉尼亚密码加解密与破解
实验目的 1.进一步理解维吉尼亚密码的加解密原理 2.进一步理解维吉尼亚密码的缺陷和利用方法 3.提高编程实践能力 实验要求 1.实现维吉尼亚加解密函数 2.破解维吉尼亚加密的密文 实验步骤 1.维吉 ...
- 汽车安全大赛中一道zip压缩包解密题破解
在一次汽车安全大赛中,遇到一个压缩包解密的题目,压缩包文件如下 初步分析发现car.pcapng,未加密可以直接解压处出,图片文件需要密码才能解开,并给出图片采用了隐写术.wireshark打开car ...
- AT89C51SND2单片机解密与破解
芯片解密研究所长期提供MICROCHIP单片机.SYNCMOS单片机.ALTERA单片机. ATMEL单片机.VERSACHIPS单片机.HITACHI单片机.NXP单片机.EMC单片机.DALLAS ...
- 加脱壳、加解密、破解辅助及其源码
PE辅助工具 程序名称 作者 说明 PETool v0.45 beta MackT PE文件信息查看编辑工具,VC源码. PE Labs 1.0 Latigo PE文件信息查看工具,Win32ASM源 ...
- Sql存储过程加密和解密
可用于加密SQL存储过程或者触发器(这是SQL Server本身提供的,也就是说这是微软的加密算法) http://www.mscto.com 使用 WITH ENCRYPTION 选项 WITH E ...
- 实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!
来源/早起Python 本文将分享如何利用 Python 对 PDF 进行加密和解密操作,主要利用到之前多次介绍过的PyPDF2 模块. PDF 加密 在之前的文章PDF合并.拆分.水印.加密中简单提 ...
- 账号密码忘了不要慌,教你用Python自动解密解码,轻松获取!
前些天突然想进一个网站,但是太久没登录,密码早就忘了,于是想到Python 的一款神器Ciphey,三下五除二就把密码找回来了! Ciphey 是一个使用自然语言处理和人工智能的全自动解密/解码/破解 ...
最新文章
- android studio 多dex,AndroidStudio利用android-support-multidex解决64k的各种异常
- C++ unique
- 一次MYSQL 服务器性能优化之旅
- STM32涨价?那就用国产32替代吧!
- 切记!构造函数里面别一定不要初始化其他类,踩过坑的都知道
- 一台电脑,内外网同时使用
- 地址管理和子网划分基础
- Codeforces Round #716 (Div. 2), B. AND 0, Sum Big, 快速幂结论题
- 2022年使用的最佳Javascript库
- IOS开发之——数据库-Couchbase(05)
- Webmagic爬虫框架
- android 计时器工具类,Android实现计时器功能
- java9 javascript_[Java教程]9最好的JavaScript压缩工具
- SysKey 和 SAM
- vscode+CRA+TypeScript+eslint+prettier+stylelint+husky+lint-staged完整版配置
- 注册服务号、订阅号流程
- python中aorb是什么意思_Python--AB测试应用分析
- 行内元素和块元素的区别
- GPRS电力远程自动抄表系统解决方案
- Dubbo 2 Dubbo 概述 2.1 Dubbo 概念 2.2 Dubbo 架构
热门文章
- Making Decisions(Chapter 6 of Programming in Objective-C 2.0)
- MySQL数据库快捷键
- 新手入门常见问题--下载第三方库及查看
- ArcGIS学习14:基于OD方法的网络节点关系分析
- 极品飞车9重制版,剧情到,车子抛锚,选第一辆车,就闪退,终于解决了
- 分享了一篇文章:《格子出位nbsp;要你好看》
- 掌财社:马桶MT被山寨,聊天宝赚钱不如捡废品,多闪表现平平
- 深度分析:摩尔定律失效可能会影响全球经济
- oracle清理aud问来哦,oracle 審計日志清理
- 一步步学习微软InfoPath2010和SP2010--第五章节--添加逻辑和规则到表单(6)--使用规则创建多视图样式向导表单