BNU 背包密码(编码与解密)
背包密码
64-bit integer IO format: %lld Java class name: Main
背包密码系统是一种非常经典的公钥密码系统,这种密码系统加密过程如下:
- 选取一个长度为n的正整数超递增序列a[i],满足a[1]<a[2],a[1]+a[2]<a[3],……,a[1]+a[2]+…+a[n-1]<a[n]。
- 选取正整数m>2*a[n],w和m互质,v是w模m的逆,即(v*w)%m=1。b[i]=(w*a[i])%m。
- 加密时,对一段长为n的二进制串x[i]。有S= (b[1]*x[1]+b[2]*x[2]+…+b[n]*x[n]%m。
这种密码,告诉你b[i]就可以进行加密。但是仅有b[i]很难进行解密,因为需要求解一个普通的01背包问题 。只有再告诉你v和m,解密就会变得很简单,现在告诉你b[i]、v和m以及S,请你帮忙进行解密。
Input
正整数T(T<100),代表数据组数。每组数据格式如下:
第一行正整数n(1<=n<=32)代表二进制串的长度
第二行n个正整数b[1]到b[n]
第三行三个整数,v和m以及S。
(保证所有输入都在10^9以内,提示:中间过程可能会用到long long)
Output
对每组数据输出一行,解密得到的二进制串x[i]
Sample Input
2 3 3 6 1 4 11 4 4 1 18 20 24 2 33 5
Sample Output
101 0110思路:好题。已知:1.v*w%m=12.b[i]=(w*a[i])%m a[i]为递增数列3.S= (b[1]*x[1]+b[2]*x[2]+…+b[n]*x[n]%m 求x[i]解:由2、3得:4.S= ((w*a[1])%m*x[1]+(w*a[2])%m*x[2]+…+(w*a[n])%m*x[n])%m4左右同乘以 v%m S*v%m = v%m*((w*a[1])%m*x[1]+(w*a[2])%m*x[2]+…+(w*a[n])%m*x[n])%m5.S*v%m =a[1]%m*x[1]+...+a[n]%m*x[n]由1、2得:b[i]*v%m=(w*a[i])%m*v%m6.a[i]%m=b[i]*v%m由5、6得:S*v%m =b[1]*v%m*x[1]+...+b[i]*v%m*x[n] x[i]为01所组成的编码即时如 5=1*x[1]+2*x[2]+4*x[3](第一组样例推到来的) a[i]为递增数列 所以得优先从后往前考虑如果s》=b[i]*v%m x[i]=1 s-=b[i]*v%m;
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define LL long long
int main()
{int t;scanf("%d",&t);while(t--){LL n;scanf("%lld",&n);LL b[1005];for(int i=0;i<n;i++)scanf("%lld",&b[i]);LL v,m,s;scanf("%lld%lld%lld",&v,&m,&s);for(int i=0;i<n;i++){b[i]=b[i]*v%m;}s=s*v%m;
// printf("s:%lld\n",s);
// for(int i=0;i<n;i++)
// printf("%lld ",b[i]);for(int i=0;i<n;i++){if(s>=b[n-i-1]){s-=b[n-i-1];b[n-i-1]=1;}elseb[n-i-1]=0;}for(int i=0;i<n;i++)printf("%lld",b[i]);printf("\n");}
}
BNU 背包密码(编码与解密)相关推荐
- CTF-Crypto 密码原理及解密方法
CTF-Crypto 密码原理及解密方法 文章目录 CTF-Crypto 密码原理及解密方法 推荐综合加解密网址 一.常见密码格式 二.古典密码 凯撒密码 仿射密码 埃特巴什码 培根密码 棋盘密码 希 ...
- Backpack Cryptography【背包密码】
背包问题 在介绍背包密码体系之前,先来引入一下背包问题. 现在我们有n个物品,每个物品都有一定的质量,背包承重是W,问哪些物品放到书包里恰好可以把这个书包装满. 好了这就是著名的背包问题,我们用一个式 ...
- MySQL连接配置文件密码加密以及解密
老生常谈的加密问题 这次是对数据库连接属性的加密 一开始接到这个任务感觉很迷茫,刚开始bing了如何登录加密,但是结果不对 后来发现是关键字没搜索对,改成了"数据库连接加密",了解 ...
- CTF常见密码编码合集
ASCII编码 简述:使用制定的7位或8位二进制数组合来表示128或256种可能的字符.使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0到9.标点符号,以及在美式英语中使用的 ...
- 04_《计算机安全原理与实践》密码编码工具(下)
04_<计算机安全原理与实践>密码编码工具(下)含本章理论性习题解答 前言 本专栏上一篇博文介绍了消息认证的机理和非对称加密体系,从实际应用角度,二者是不可分割的.本章将在上一章的基础上进 ...
- 密码控件解密流程和原理
文章目录 密码控件解密流程和原理 1.1 RSA 1.2 国密 2.1随机数生成 3引申知识hex和base64 3.1hex 3.2 base64 4.国产密码算法 参考文档 密码控件解密流程和原理 ...
- spring 安全编码_Spring安全性和密码编码
spring 安全编码 在以前的文章中,我们深入探讨了Spring安全性. 我们实现了由jdbc支持的安全性,基于自定义 jdbc查询的安全性以及从nosql数据库检索安全性的信息. 通过足够小心,我 ...
- Spring Security和自定义密码编码
在上一篇文章中,我们使用jdbc和md5密码编码将密码编码添加到了我们的spring安全配置中. 但是,在定制UserDetailsServices的情况下,我们需要对安全配置进行一些调整. 我们 ...
- Spring安全性和密码编码
在以前的文章中,我们深入探讨了Spring安全性. 我们实现了由jdbc支持的安全性,基于自定义 jdbc查询的安全性以及从nosql数据库检索安全性的信息. 通过足够小心,我们会发现密码为纯文本格式 ...
- 在线Base64编码加密解密还原工具
在线Base64编码加密解密还原工具 在线Base64编码加密解密还原工具 在线对数据进行base64编码加密和对base64数据进行解密还原 Base64编码要求把3个8位字节(38=24)转化为4 ...
最新文章
- 我的MYSQL学习心得(十六) 优化
- opencv的两个错误
- 数据科学 IPython 笔记本 7.5 数据索引和选择
- 常程加盟小米,“电磁炉”组合出道,网友喊话雷军也接收一下罗永浩!
- 乱谈互联网产品开发(二)
- 企业权限管理系统之AdminLTE的基本介绍(一)
- MP4BOx hint等常用命令
- 阿里巴巴android代码生成器,在线热点代码生成器代码生成工具-1秒钟美工助手官方网站...
- 【山科OJ】Problem C: Matrix Problem (III) : Array Practice
- ttest函数使用方法_TTEST 函数 - EXCEL 2010 中文帮助文档
- c语言中布尔类型字节数,【C语言】中的布尔类型
- ThinkPHP报错The requested URL /index/index/xxx.html was not found on this server.
- android老人机桌面,孝敬父母哪家强?老人桌面大横评
- Openlayer图层载入时进行坐标系的转换
- 中国足球有救了,因为这两个人已经成为中超新时代教练的一股清流
- 有discuz数据库,忘了管理员密码,怎样进后台
- 香港主机如何设置网站404页面
- 谷歌浏览器打印不弹出预览直接打印机打印的方法
- 多目标粒子群算法求解帕累托前沿Pareto,Pareto的原理,测试函数100种求解之21
- AS怎么找回不小心 删除的layout文件
热门文章
- 十五部必藏之经典日剧(给喜欢怀旧的朋友)--转贴,的确经典,还有很多没看过,不过排名前二都看了,呵呵...
- 拿到串口的数据如何解析_详解如何用binlog2sql解析工具来实现mysql数据表异地恢复...
- span 居中_H5元素的水平垂直居中布局总结
- JAVAFX 第三方库 布局 小工具 美化 测试 UI 框架 推荐
- SpringBoot学习---yaml配置
- android 瀑布流StaggeredGridLayoutManager重新排序后,顶部留白处理
- 聊聊rocketmq的SequenceProducerImpl
- 配置Keepalived双实例高可用Nginx
- 准备上线,切换到master分支,报错
- 《网络工程师软考辅导——3年真题详解与全真模拟》主要创新点、关注点