简单的加密系统c/c++
下面是一个基于模运算【%】的加密系统,大致是这样的
先搞出来4个大数(下面的例子是八位的数字)其实他本身的是否为质数不用考虑
#define h 37301231
#define u 30724313
#define s 70654554
#define o 98745554
现在,再定义一个需要加密的数在longlong
范围内,否则要加高精度模运算或者加法【等回来更新】
进行如下运算
a*=h;a%=u;
但是这里面就用到两个数字啊?而且会有大量相同的重复,解码就存在问题了,所以
long long b=a;
b*=s;b%=o;
这样子就对一个数进行了两次的伪hash加密,同时得到~~两串秘钥~~ ,来确定一个数字也有可能会有重复,但应该也在long long 范围之外了
但是基于该程序的漏洞,秘钥长度不相同,难以合成所以我决定用一个字符来表示后边的长度
这里a就是加密的数字,而This is the first keys
所指的即为第一次的秘钥,第二个就是标志长度的的字符,这里出了点问题输出的是 ` 的符号,
不过不要在意那些细节
下面就是暴力解码,就是那个ans is:100031708
,下面是暴力解的代码
int qiu(long long a,long long b){
int sum=0;
for(long long i=0;i<=N;i++){
if(((i%h)*u==a)&&((i%s)*o==b)){
cout<<i;
// break;
}
}
}
N是一个常数
#define N 102040000
那么上全部的代码吧,有两种版本的
#include<bits/stdc++.h>
#include<windows.h>
#define h 37301231
#define u 30724313
#define s