#include <iostream>
#include <string>
using namespace std;
//破解当前密码,只适合4位纯数字的密码(异或加密)////
////思想是,首先将原文用密码异或加密(异或加密特点是原文异或得到密文,密文异或得到原文,即解密,即原文异或加密两次便得到原文),
////将得到的密文传入破解密码函数,异或解密成原文,如原文与实际原文相同,则表示密码正解,即破解成功,否则继续对比查找。
///
string strp(const string & str,const string & strpw);
string pjpw(const string & str,const string & strpw);
int main()
{
string s1="this is a book.";
string pass="9987";
string mw=strp(s1,pass);//原文加密并赋值给mw
cout<<"密文是:"<<mw<<endl;//输出密文
string jpw=pjpw(s1,mw);//用破解函数破解4位密码,将破解成功的密码赋值给jpw
cout<<"破解的密码是: "<<jpw<<endl;//输出破解的密码
cout<<"原文是: "<<strp(mw,jpw)<<endl;//用破解所得的密码jpw解开密文mw,并输出
return 0;
}
//用原始密码加密(解密)函数
string strp(const string & str,const string & strpw)
{
int k=0;
string strpp;
for(int i=0;i<str.size();++i)
{
strpp+=str[i]^strpw[k];//异或加密
++k;
if(k==4)
k=0;
}
return strpp;
}
//破解密码函数
string pjpw(const string & str,const string & strpw)
{
string pass;
/////////求尽所有的密码////
for(char c1='0';c1<='9';++c1)
for(char c2='0';c2<='9';++c2)
for(char c3='0';c3<='9';++c3)
for(char c4='0';c4<='9';++c4)
{
pass=c1;
pass+=c2;
pass+=c3;
pass+=c4;
///得到pass密码,用当前密码尝试解密////
if(strp(strpw,pass)==str)//如果密码正确,则再次加密后(将原文异或加密两次便得到原文)的文本便和原文本相同,返回密码,否则继续比对
return pass;
}
return 0;
}。