凯撒加密:
#include <iostream>
#include <fstream>
#include <tchar.h>
using namespace std;
//11月算法基础班
//如何解密未知nCaesar的密文
//1.暴力解密,进行26次
//2.统计密文中字符出现的频率,与正常文本中字符的频率进行比较
int _tmain(int argc, _TCHAR* argv[])
{
ifstream iFile("G://program/C++pro/try_example/Caesar_encode/123.txt");//代加密文件
iFile.seekg(0,ios::end);
int nFileLen=iFile.tellg();
iFile.seekg(0,ios::beg);
char* str=new char[nFileLen+1];
iFile.read(str,nFileLen);
iFile.close();
str[nFileLen]=0;
int nCaesar=3;//解密时只需要nCaesar=-3
int n=0;//记录回车的数目
for (int i=0;i<nFileLen;i++)
{
if ((str[i]>='a') && (str[i]<='z'))
{
str[i]+=nCaesar;
if (str[i]>'z')
{
str[i]-=26;
}
}else if((str[i]>='A') && (str[i]<='Z')){
str[i]+=nCaesar;
if (str[i]>'Z')
{
str[i]-=26;
}
}else if (str[i]=='\n')
{
n++;
}
}
ofstream oFile("G://program/C++pro/try_example/Caesar_encode/123_encode.txt");
oFile.write(str,nFileLen-n);
oFile.close();
delete[] str;
return 0;
}异或加密:
#include "iostream";
#include "stdio.h";
#include "tchar.h";
/********异或加密属于对称加密,解密只需运行再一次运行程序即可********/
void main(){
FILE* pFile=fopen("G:\\program/C++pro/try_example/XOR_Encryption/123.txt","rb");
fseek(pFile,0,SEEK_END);
int nFileLen=ftell(pFile);
fseek(pFile,0,SEEK_SET);
char* str=new char[nFileLen+1];
fread(str,nFileLen,1,pFile);
fclose(pFile);
str[nFileLen]=0;
char* secret="JulyEdu";
int nLen=(int)strlen(secret);
int j=0;
for (int i=0;i<nFileLen;i++)
{
str[i]^=secret[j];
j++;
if (j>=nLen)
{
j-=nLen;
}
}
FILE* pFile2=fopen("G:\\program/C++pro/try_example/XOR_Encryption/123_encode.txt","wb");
fwrite(str,nFileLen,1,pFile2);
fclose(pFile2);
delete[] str;
}
本文介绍并展示了两种加密方法:凯撒加密与异或加密的实现过程。通过具体的代码示例,不仅演示了如何对文本进行加密,还解释了如何解密,特别是对于未知偏移量的凯撒加密文本的破解方法。
1170

被折叠的 条评论
为什么被折叠?



