[硫化铂]密码

2024-03-16 22:32
文章标签 密码 硫化

本文主要是介绍[硫化铂]密码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

密码

在这里插入图片描述在这里插入图片描述

题解

完了,居然开始阴间的密码题了。

首先的第一个想法是像 D N A DNA DNA片段一样,加几个开始码,结束码用于识别。但显然,这最多只能拿前面的 55 p t s 55pts 55pts,我们的正解最多只给我们 50 50 50个空位,显然是不行的。
这个时候,我们就可以联想到我们传统的线性变换方法用于加密了,由于我们给定的是加密串中的 k k k个位置与整个原文串,我们得用加密串的剩下 m − k m-k mk个位置凑出整个原串。
通过不连续的 m − k m-k mk个位置凑出原串,我们不妨就给它随机 m − k m-k mk个长度为 n n n 0 / 1 0/1 0/1串,只要这个 0 / 1 0/1 0/1串是满秩的,那么它们是一定能够异或出我们的原串的。
实际上,由于 m − k ⩾ n + 50 m-k\geqslant n+50 mkn+50,所以它们满秩的概率是相当高的。
我们可以就让我们解密串上的第 i i i位表示我们凑出原串的过程是否需要异或上我们的第 i i i个串,这可以用线性基就可以算出。
当然,由于我们解密的时候并不知道哪几位是开始就固定的,所以我们开始固定的 k k k位当然也有自己固定的 0 / 1 0/1 0/1串,只是它们异不异或上的状态是固定的,所以说,相当于他最开始就已经对原串做了 k k k个线性变换,我们解密时是知道这 k k k个线性变换状况的,一并去掉就行了。
当然,上面的方法当然需要我们加密与解密时每一位对应的 0 / 1 0/1 0/1串是相同的,事实上。用相同的种子生成这个 0 / 1 0/1 0/1就行了。

时间复杂度 O ( n 2 m ω ) O\left(\frac{n^2m}{\omega}\right) O(ωn2m)

源码

#include "password.h"
#include<bits/stdc++.h>
using namespace std;
#define MAXN 2055
#define lowbit(x) (x&-x)
#define reg register
#define pb push_back
#define mkpr make_pair
#define fir first
#define sec second
#define lson (rt<<1)
#define rson (rt<<1|1)
typedef long long LL;
typedef unsigned long long uLL; 
typedef long double ld;
typedef pair<int,int> pii;
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
template<typename _T>
void read(_T &x){_T f=1;x=0;char s=getchar();while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}x*=f;
}
template<typename _T>
void print(_T x){if(x<0){x=(~x)+1;putchar('-');}if(x>9)print(x/10);putchar(x%10+'0');}
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
int add(int x,int y,int p){return x+y<p?x+y:x+y-p;}
void Add(int &x,int y,int p){x=add(x,y,p);}
int qkpow(int a,int s,int p){int t=1;while(s){if(s&1)t=1ll*t*a%p;a=1ll*a*a%p;s>>=1;}return t;}
bitset<1005>val[MAXN],aim,mat[MAXN],tmp;
bitset<MAXN>ip[MAXN],dmp,answer;
void insert(int n,int id){tmp=val[id];dmp.reset();dmp[id]=1;for(int i=0;i<n;i++)if(tmp.test(i)){if(mat[i].test(i))tmp^=mat[i],dmp^=ip[i];else{mat[i]=tmp;ip[i]=dmp;break;}}
}
void encoder(int n,int m,int k,const char* a,const char* b,char* ans){mt19937 e(114514);uniform_int_distribution<int> g(0,1);for(int i=0;i<m;i++)for(int j=0;j<n;j++)val[i][j]=g(e);for(int i=0;i<n;i++)aim[i]=a[i]-'0';for(int i=0;i<m;i++)if(b[i]=='1')aim^=val[i];for(int i=0;i<m;i++)if(b[i]=='?')insert(n,i);for(int i=0;i<n;i++)if(aim.test(i))aim^=mat[i],answer^=ip[i];for(int i=0;i<m;i++)if(b[i]=='?')ans[i]=answer[i]+'0';else ans[i]=b[i];
}
void decoder(int n,int m,const char *a,char* ans){mt19937 e(114514);uniform_int_distribution<int> g(0,1);for(int i=0;i<m;i++)for(int j=0;j<n;j++)val[i][j]=g(e);aim.reset();for(int i=0;i<m;i++)if(a[i]=='1')aim^=val[i];for(int i=0;i<n;i++)ans[i]=aim[i]+'0';
}

谢谢!!!

这篇关于[硫化铂]密码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/816932

相关文章

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

mysql导出导入数据和修改登录密码

导出表结构: mysqldump -uroot -ppassword -d dbname tablename>db.sql; 导出表数据: mysqldump -t dbname -uroot -ppassword > db.sql 导出表结构和数据(不加-d): mysqldump -uroot -ppassword dbname tablename > db.sql;

Ubuntu 环境下ssh的安装、使用以及免密码登录

以两台机器为例:     A12.12.10.11B12.12.10.13 安装: Ubuntu默认安装了ssh客户端,只需要在被登录的机器上安装ssh服务器即可: $ sudo apt-get install openssh-server     启动ssh服务器: $ sudo /etc/init.d/ssh start 查看是否启动成功: $ ps -ef |grep

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录(失败记录)

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录 这次是装实体机,一次失败的尝试。。。 名称型号CPUIntel Xeon E5-2673 V3GPURTX 3060 mobile 安装的时候不要选install third-party software for graphics and Wi-fi hardware and additional media

oracle密码维护

查看密码是否可以重复使用 SQL> select PROFILE,RESOURCE_NAME,LIMIT from dba_profiles where profile='DEFAULT' and resource_type ='PASSWORD'; PROFILE                        RESOURCE_NAME                    LIMIT ----

【网络安全】古典密码体制概述

1. 古典密码体制概述 1.1 定义与历史背景 古典密码体制是指在计算机科学和信息安全技术出现之前的传统加密方法。这些方法主要包括替换和易位两种基本形式。古典密码体制的特点是简单、易用,但安全性不高,容易被破解。在古代,人们使用纸、笔或简单的器械来实现加密和解密操作。 定义:古典密码体制是基于简单数学运算和文字替换的加密方法,包括替代密码和置换密码两大类。历史背景:古典密码的使用可以追溯到古

vsftpd配置用户和密码让其他客户端连接

一、第一个主机:vsftpd下载及配置 前置准备: #卸载防火墙yum -y remove firewalld#为了不让防火墙有影响,iptables配置也清空iptables -Fvim /etc/selinux/confSELINUX=disabled #主要是把它改为disabled或者permissiveSELINUXTYPE=targeted#重启linux让selin

【linux mysql】mysql高版本8.0.23版本密码修改总结

mysql 8.0 版本,由于增加了一些安全策略等限制,所以修改用户密码会稍微麻烦些。下面是针对这个高版本的总结。 一、配置/etc/my.cnf 文件 免密码登录mysql vim /etc/my.cnf# 增加这两行命令skip-grant-tablesdefault-authentication-plugin=mysql_native_password 重启启动mysql se