//这里只用了两个函数分别实现加密和解密,暂时只对小写字母进行处理,如果要处理其他
//的可参考此程序作对应的修改即可.
#include
#include
#define MAX 256
int Encryption(char *a); //加密
int Decryption(char *a); //解密
int main()
{
int type;
char a[MAX];
printf("请输入一个字符串,以回车结束.\n");
while(gets(a)!=NULL)
{
printf("请输入要执行的操作方式(1为加密,0为解密):\n");
scanf("%d",&type);
getchar();//获取最后一个回车换行符并舍弃
if(type == 1)
{
Encryption(a); //加密
printf("加密后的字符串为:%s\n",a);
}
else
{
Decryption(a);//解密
printf("解密后的字符串为:%s\n",a);
}
printf("请输入一个新的字符串,以回车结束.\n");
}
return 0;
}
int Encryption(char *a) //加密函数定义
{
int i;
for(i=0;i
if(a[i]>='a'&&a[i]<='z')//只有小写字母才进行加密
{
a[i]=a[i]+i+1; //表示第几个字母移动多少位
if(a[i]>'z') //移动后超过z了要循环回a
{
a[i]='a' + (a[i]-'z') - 1;
}
}
}
return 0;
}
int Decryption(char *a) //解密函数定义
{
int i;
for(i=0;i
if(a[i]>='a'&&a[i]<='z')//只有小写字母才进行解密
{
a[i]=a[i] - (i+1); //表示第几个字母移动多少位
if(a[i]<'a') //移动后小于a了要循环回z
{
a[i]='z' - ('a'-a[i]) + 1;
}
}
}
return 0;
}
运行结果为:
请输入一个字符串,以回车结束.
this is a sample
请输入要执行的操作方式(1为加密,0为解密):
1
加密后的字符串为:ujlw oz j dmzdau
请输入一个新的字符串,以回车结束.
ujlw oz j dmzdau
请输入要执行的操作方式(1为加密,0为解密):
0
解密后的字符串为:this is a sample
请输入一个新的字符串,以回车结束.
加密程序代码:
#include
#define N 1000 //一条信息中最大字符数
/* 加密信息 */
int code(char* str)
{
int index=0;
while (*str != 0) {
index++;
if (*str>='a' && *str<='z') {
*str = (*str - 'a' + index)%26 + 'a';
} else if (*str>='A' && *str<='Z') {
*str = (*str - 'A' + index)%26 + 'A';
}
str++;
}
return 0;
}
/* 主函数 */
int main()
{
char str[N];
printf("请输入明文:\n");
gets(str);
code(str);
printf("加密后的文字: \n%s\n", str);
return 0;
}
运行程序,输入与输出如下:
请输入明文:
This is a sample.
加密后的文字:
Ujlw oz j dmzdau.
下面为解密的程序代码:
#include
#define N 1000 //一条信息中最大字符数
/* 解密信息 */
int decode(char* str)
{
int index=0;
while (*str != 0) {
index--;
if (index<0)
index += 26;
if (*str>='a' && *str<='z') {
*str = (*str - 'a' + index)%26 + 'a';
} else if (*str>='A' && *str<='Z') {
*str = (*str - 'A' + index)%26 + 'A';
}
str++;
}
return 0;
}
/* 主函数 */
int main()
{
char str[N];
printf("请输入暗文:\n");
gets(str);
decode(str);
printf("解密后的文字: \n%s\n", str);
return 0;
}
运行程序,输入与输出如下:
请输入暗文:
Ujlw oz j dmzdau.
解密后的文字:
This is a sample.
//加密函数
int encryption(char *src,char *tar)
{
char *p=src,*q=tar;
int count=0;
while(*p!='\0')
{
count++;
if(*p>='a'&&*p<='z')
{
*q=(*p-97+count)%26+97;
}
else if(*p>='A'&&*p<='Z')
{
*q=(*p-65+count)%26+65;
}
else
*q=*p;
p++;
q++;
}
*q='\0';
return 1;
}
//解密函数
int decrypt(char *src,char *tar)
{
char *p=src,*q=tar;
int count=0;
while(*p!='\0')
{
count++;
if(*p>='a'&&*p<='z')
{
*q=(*p-97+26-(count%26))%26+97;
}
else if(*p>='A'&&*p<='Z')
{
*q=(*p-65+26-(count%26))%26+65;
}
else
*q=*p;
p++;
q++;
}
*q='\0';
return 1;
}
加密:
#include
#include
int main()
{
char c[100];
int i=1,j=0;
gets(c);
for(;c[j];j++)
{
if(c[j]>='a'&&c[j]<='z')
{
c[j]='a'+(c[j]-'a'+i)%26;
i++;
}
else if(c[j]>='A'&&c[j]<='Z')
{
c[j]='A'+(c[j]-'A'+i)%26;
i++;
}
}
puts(c);
}
解密:
#include
#include
int main()
{
char c[100];
int i=1,j=0;
gets(c);
for(;c[j];j++)
{
if(c[j]>='a'&&c[j]<='z')
{
c[j]='z'+(c[j]-'z'-i)%26;
i++;
}
else if(c[j]>='A'&&c[j]<='Z')
{
c[j]='Z'+(c[j]-'z'+i)%26;
i++;
}
}
puts(c);
}
#include
#include
#include
#define ENCODE // 把这行删掉就是变成解码
char encode(char s, int d)
{
if(isupper(s))
{
s = (s - 'A' + d)%26 + 'A';
}
else if(islower(s))
{
s = (s - 'a' + d)%26 + 'a';
}
return s;
}
char decode(char s, int d)
{
d = d%26;
if(isupper(s))
{
s = (s - 'A' + 26 - d)%26 + 'A';
}
else if(islower(s))
{
s = (s - 'a' + 26 - d)%26 + 'a';
}
return s;
}
int main()
{
char s[1000];
int len, i;
while(gets(s))
{
len = strlen(s);
for(i=0;i
if(isalpha(s[i]))
{
#ifdef ENCODE
s[i] = encode(s[i],i+1);
#else
s[i] = decode(s[i],i+1);
#endif
}
}
puts(s);
}
}