#include<iostream>
#include<cstring>
using namespace std;
int k,n;char o[10000];
int A[10000],B[10000];
int key[10000];int num=0;
int choose;
void twist()
{
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));n=-1;
freopen("message.txt","r",stdin);
char t=getchar();while(t!='#'){o[++n]=t;t=getchar();}
n++;int a;
for(a=0;a<n;a++)
{
if(o[a]==10)A[a]=3;
else A[a]=o[a]-32;
}
for(a=0;a<n;a++)B[a]=((A[k*a%n]-a)%95+95)%95;
freopen("message.txt","w",stdout);
for(a=0;a<n;a++)
{
if(B[a]==3)putchar('\n');
else putchar(B[a]+32);
}
putchar('#');
freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}
void untwist()
{
int a;
freopen("message.txt","r",stdin);
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));n=-1;
char t=getchar();while(t!='#'){o[++n]=t;t=getchar();}
n++;
for(a=0;a<n;a++)
{
if(o[a]==10)A[a]=3;
else A[a]=o[a]-32;
}
for(a=0;a<n;a++)B[k*a%n]=((A[a]+a)%95+95)%95;
freopen("message.txt","w",stdout);
for(a=0;a<n;a++)
{
if(B[a]==3)putchar(10);
else putchar(B[a]+32);
}
putchar('#');
freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
}
int main()
{
puts("欢迎使用twist密码系统2.0离线版 powerd by Qxy");
puts("您可以使用它加密任意只含英文/数字/英文符号的文本。");
puts("注意!#为文本结束符,键入文本后,需要在末尾添加#");
puts("注意!在一次运行过程中不要同时执行解密与加密,否则密匙队列会出错!");
puts("注意!您可以多重加密与多重解密!");
printf("\n\n");
puts("按1加密 按2解密 按0退出");
printf("\n\n");
scanf("%d",&choose);if(choose==0)return 0;
printf("\n\n");
puts("请输入你的密匙");
printf("\n\n");
scanf("%d",&k);
printf("\n\n");
while(choose==1||choose==2)
{
if(choose==1){key[++num]=k;}
if(choose==1)twist();
else if(choose==2)untwist();
if(choose==1)puts("加密成功!");
else puts("解密成功!");
puts("按任意键继续......");
char t=getchar();
printf("\n\n");
puts("按1加密 按2解密 按0退出");
printf("\n\n");
scanf("%d",&choose);if(choose==0)break;
printf("\n\n");
puts("请输入你的密匙");
printf("\n\n");
scanf("%d",&k);
printf("\n\n");
}
if(num!=0)
{
printf("您本次加密了%d次\n",num);
printf("解密时您需要解密%d次\n",num);
puts("您解密的密匙队列如下:");
for(int a=1;a<=num;a++)
{
printf("%d ",key[num-a+1]);
if(a%5==0)putchar(10);
}
}
putchar(10);
puts("按任意键结束......");
char t=getchar();t=getchar();
return 0;
}
基于twist加密法的代码实现
最新推荐文章于 2025-07-20 16:11:39 发布