数据加密:
算法1:(不可逆)
将ASCII表中32~~126中的字符,加密后,显示为128~~255的字符.
128~~255的字符会让人看起来头痛些。。。。。。安全.
当ch[?]的值为偶数时:ch[?]=255-ch[?]的个位*10-ch[?]的十位
当ch[?]的值为奇数时: ch[?]=128+ch[?]的个位*10+ch[?]的十位
当ch[?]的值为质数时:ch[?]=128+ch[?]的个位+ch[?]的十位
算法2:(可逆)
当ch[?]的值能被3整除时:ch[?]-=2,否则ch[?]-=3;
*****************************/
#include<stdio.h>
void main()
{
char ch[100];
int flag[100]={0};//flag[i]为1时表示加密过程为+2,为2时表示为+2越界,为3时表示+3越界
int i,j,m;//循环变量,i表示输入字符的个数
char PsWay;//表示加密方式
char yesorno;//表示是否继续使用
printf("\n本代码由(http://hi.baidu.com/dazhufeng)大竹峰-师从田不易提供\n\n");
printf("*************选择加密算法*************\n");
printf("1.不可逆,加密后为乱码.\n\n");
printf("2.可逆,密码为0~9,a~z或A~Z(密码只取前8位).\n\n");
do
{
fflush(stdin);
do
{
printf("请选择(1|2):");
scanf("%c",&PsWay);
if (PsWay!='1' && PsWay!='2')
{
printf("请输入1或2选择加密方法!\n");
}
}while(PsWay!='1' && PsWay!='2');
printf("请输入密码:");
fflush(stdin);
for(i=0;;i++)//数据输入
{
ch[i]=getchar();
if (ch[i]=='\n')
break;
}
fflush(stdin);
if (PsWay=='1')//第一种----不可逆算法
{
for(j=0;j<i;j++)//加密过程
{
if(ch[j]%2==0)//偶数
{
if (ch[j]<100)
{
ch[j]=255-(ch[j]%10)*10-ch[j]/10;
}
else
{
ch[j]=255-(ch[j]%100)*10-(ch[j]/10)%10;
}
}
else//奇数
{
if (ch[j]<100)
{
ch[j]=128+(ch[j]%10)*10+ch[j]/10;
}
else
{
ch[j]=128+(ch[j]%100)*10+(ch[j]/10)%10;
}
}
for(m=2;m<ch[j];m++)//素数
{
if(ch[i]%m==0)
{
if (ch[j]<100)
{
ch[j]=128+(ch[j]%10)+ch[j]/10;
}
else
{
ch[j]=128+(ch[j]%100)+(ch[j]/10)%10;
}
break;
}
}
}
}
else//第二种---可逆的算法
{
//printf("\nA:%d\tS:%d\tD:%d\tF:%d\tA:%d\tS:%d\n",'A','S','D','F','A','S');
for(j=0;j<i;j++)
{
if (ch[j]>=97)
{
if (ch[j]%3==0)
{
ch[j]=ch[j]+2;
if (ch[j]>122)
{
ch[j]=ch[j]-26;
flag[j]=2;
}
else
flag[j]=1;
}
else
{
ch[j]=ch[j]+3;
if (ch[j]>122)
{
ch[j]=ch[j]-26;
flag[j]=3;
}
}
}
else if(ch[j]>=65)
{
if (ch[j]%3==0)
{
ch[j]=ch[j]+2;
if (ch[j]>90)
{
ch[j]=ch[j]-26;
flag[j]=2;
}
else
flag[j]=1;
}
else
{
ch[j]=ch[j]+3;
if (ch[j]>90)
{
ch[j]=ch[j]-26;
flag[j]=3;
}
}
}
else if(ch[j]>=48)
{
if (ch[j]%3==0)
{
ch[j]=ch[j]+2;
if (ch[j]>57)
{
ch[j]=ch[j]-10;
flag[j]=2;
}
else
flag[j]=1;
}
else
{
ch[j]=ch[j]+3;
if (ch[j]>57)
{
ch[j]=ch[j]-10;
flag[j]=3;
}
}
}
}
}
printf("加密后的数据为:\n");
for(j=0;j<i;j++)//将加密后的数据输出
{
printf("%c",ch[j]);
}
printf("\n");
if(PsWay=='2')//输出原始信息
{
for(j=0;j<i;j++)
{
if(flag[j]==0)
{
ch[j]-=3;
}
else if(flag[j]==1)
{
ch[j]-=2;
}
else
{
if (ch[j]>=65)
ch[j]=ch[j]+26-flag[j];
else
ch[j]=ch[j]+10-flag[j];
}
}
for(j=0;j<i;j++)
{
printf("%c",ch[j]);
}
printf("\n");
}
printf("输出完毕... ...\n");
printf("是否继续(Y/N):");
scanf("%c",&yesorno);
}while(yesorno=='y' || yesorno=='Y');
printf("\n欢迎使用,再见!\n");
getchar();
getchar();
}
算法1:(不可逆)
将ASCII表中32~~126中的字符,加密后,显示为128~~255的字符.
128~~255的字符会让人看起来头痛些。。。。。。安全.
当ch[?]的值为偶数时:ch[?]=255-ch[?]的个位*10-ch[?]的十位
当ch[?]的值为奇数时: ch[?]=128+ch[?]的个位*10+ch[?]的十位
当ch[?]的值为质数时:ch[?]=128+ch[?]的个位+ch[?]的十位
算法2:(可逆)
当ch[?]的值能被3整除时:ch[?]-=2,否则ch[?]-=3;
*****************************/
#include<stdio.h>
void main()
{
char ch[100];
int flag[100]={0};//flag[i]为1时表示加密过程为+2,为2时表示为+2越界,为3时表示+3越界
int i,j,m;//循环变量,i表示输入字符的个数
char PsWay;//表示加密方式
char yesorno;//表示是否继续使用
printf("\n本代码由(http://hi.baidu.com/dazhufeng)大竹峰-师从田不易提供\n\n");
printf("*************选择加密算法*************\n");
printf("1.不可逆,加密后为乱码.\n\n");
printf("2.可逆,密码为0~9,a~z或A~Z(密码只取前8位).\n\n");
do
{
fflush(stdin);
do
{
printf("请选择(1|2):");
scanf("%c",&PsWay);
if (PsWay!='1' && PsWay!='2')
{
printf("请输入1或2选择加密方法!\n");
}
}while(PsWay!='1' && PsWay!='2');
printf("请输入密码:");
fflush(stdin);
for(i=0;;i++)//数据输入
{
ch[i]=getchar();
if (ch[i]=='\n')
break;
}
fflush(stdin);
if (PsWay=='1')//第一种----不可逆算法
{
for(j=0;j<i;j++)//加密过程
{
if(ch[j]%2==0)//偶数
{
if (ch[j]<100)
{
ch[j]=255-(ch[j]%10)*10-ch[j]/10;
}
else
{
ch[j]=255-(ch[j]%100)*10-(ch[j]/10)%10;
}
}
else//奇数
{
if (ch[j]<100)
{
ch[j]=128+(ch[j]%10)*10+ch[j]/10;
}
else
{
ch[j]=128+(ch[j]%100)*10+(ch[j]/10)%10;
}
}
for(m=2;m<ch[j];m++)//素数
{
if(ch[i]%m==0)
{
if (ch[j]<100)
{
ch[j]=128+(ch[j]%10)+ch[j]/10;
}
else
{
ch[j]=128+(ch[j]%100)+(ch[j]/10)%10;
}
break;
}
}
}
}
else//第二种---可逆的算法
{
//printf("\nA:%d\tS:%d\tD:%d\tF:%d\tA:%d\tS:%d\n",'A','S','D','F','A','S');
for(j=0;j<i;j++)
{
if (ch[j]>=97)
{
if (ch[j]%3==0)
{
ch[j]=ch[j]+2;
if (ch[j]>122)
{
ch[j]=ch[j]-26;
flag[j]=2;
}
else
flag[j]=1;
}
else
{
ch[j]=ch[j]+3;
if (ch[j]>122)
{
ch[j]=ch[j]-26;
flag[j]=3;
}
}
}
else if(ch[j]>=65)
{
if (ch[j]%3==0)
{
ch[j]=ch[j]+2;
if (ch[j]>90)
{
ch[j]=ch[j]-26;
flag[j]=2;
}
else
flag[j]=1;
}
else
{
ch[j]=ch[j]+3;
if (ch[j]>90)
{
ch[j]=ch[j]-26;
flag[j]=3;
}
}
}
else if(ch[j]>=48)
{
if (ch[j]%3==0)
{
ch[j]=ch[j]+2;
if (ch[j]>57)
{
ch[j]=ch[j]-10;
flag[j]=2;
}
else
flag[j]=1;
}
else
{
ch[j]=ch[j]+3;
if (ch[j]>57)
{
ch[j]=ch[j]-10;
flag[j]=3;
}
}
}
}
}
printf("加密后的数据为:\n");
for(j=0;j<i;j++)//将加密后的数据输出
{
printf("%c",ch[j]);
}
printf("\n");
if(PsWay=='2')//输出原始信息
{
for(j=0;j<i;j++)
{
if(flag[j]==0)
{
ch[j]-=3;
}
else if(flag[j]==1)
{
ch[j]-=2;
}
else
{
if (ch[j]>=65)
ch[j]=ch[j]+26-flag[j];
else
ch[j]=ch[j]+10-flag[j];
}
}
for(j=0;j<i;j++)
{
printf("%c",ch[j]);
}
printf("\n");
}
printf("输出完毕... ...\n");
printf("是否继续(Y/N):");
scanf("%c",&yesorno);
}while(yesorno=='y' || yesorno=='Y');
printf("\n欢迎使用,再见!\n");
getchar();
getchar();
}