C语言编程: 文件移位加密与解密。
总体设计:从键盘输入一个字符串(仅限于小写英文字母),根据密钥(用户从键盘输入,可在1-6范围内)将对应字符进行移位操作即可加密,解密时移动相反。如加密:设原文为abcd...
总体设计:从键盘输入一个字符串(仅限于小写英文字母),根据密钥(用户从键盘输入,可在1-6范围内)将对应字符进行移位操作即可加密,解密时移动相反。
如加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5位(注:z后接a)可得到密文(乱码)fghijkl。
如解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前移动5位(注a后接z),可得到原文abcdef。
调试分析过程描述:
如输入的字符串为“hijklmnopq”
输入1 ←则加密:
即会显示“mnopqrstuv” 展开
如加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5位(注:z后接a)可得到密文(乱码)fghijkl。
如解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前移动5位(注a后接z),可得到原文abcdef。
调试分析过程描述:
如输入的字符串为“hijklmnopq”
输入1 ←则加密:
即会显示“mnopqrstuv” 展开
6个回答
展开全部
这样就可以了
#include<stdio.h>
void code(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-97+key)%26;
p++;
}
}
void uncode(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-71-key)%26;
p++;
}
}
main()
{
char str[100];
int n,key;
printf("输入密匙:");
scanf("%d",&key);
printf("输入1加密,输入2解密:");
scanf("%d",&n);
printf("输入字符串:");
scanf("%s",str);
if(n==1)
{
code(str,key);
printf("密文为%s\n",str);
}
else if(n==2)
{
uncode(str,key);
printf("原文为%s\n",str);
}
}
#include<stdio.h>
void code(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-97+key)%26;
p++;
}
}
void uncode(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-71-key)%26;
p++;
}
}
main()
{
char str[100];
int n,key;
printf("输入密匙:");
scanf("%d",&key);
printf("输入1加密,输入2解密:");
scanf("%d",&n);
printf("输入字符串:");
scanf("%s",str);
if(n==1)
{
code(str,key);
printf("密文为%s\n",str);
}
else if(n==2)
{
uncode(str,key);
printf("原文为%s\n",str);
}
}
展开全部
直接对字符串按字符加减密钥的位数就可以了。
#include <iostream.h>
#define MAX 1000
//加密
char * Encryption(char *E,int Key)
{
for(int i=0;*(E+i);i++)
{
*(E+i) += Key;
if(*(E+i)>'z')
*(E+i) -= ('z'-'a')+1;
}
return E;
}
//解密
char * Decryption(char *E,int Key)
{
for(int i=0;*(E+i);i++)
{
*(E+i) -= Key;
if(*(E+i)<'a')
*(E+i) += ('z'-'a')+1;
}
return E;
}
void main()
{
char a[MAX];
int key;
cout<<"输入字符串:"<<endl;
cin >> a;
cout<<"输入密钥:"<<endl;
cin >>key;
cout<<"加密输出:"<<Encryption(a,key)<<endl;
cout<<"解密输出:"<<Decryption(a,key)<<endl;
}
#include <iostream.h>
#define MAX 1000
//加密
char * Encryption(char *E,int Key)
{
for(int i=0;*(E+i);i++)
{
*(E+i) += Key;
if(*(E+i)>'z')
*(E+i) -= ('z'-'a')+1;
}
return E;
}
//解密
char * Decryption(char *E,int Key)
{
for(int i=0;*(E+i);i++)
{
*(E+i) -= Key;
if(*(E+i)<'a')
*(E+i) += ('z'-'a')+1;
}
return E;
}
void main()
{
char a[MAX];
int key;
cout<<"输入字符串:"<<endl;
cin >> a;
cout<<"输入密钥:"<<endl;
cin >>key;
cout<<"加密输出:"<<Encryption(a,key)<<endl;
cout<<"解密输出:"<<Decryption(a,key)<<endl;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每个英文字母都有一个对应的十进制值
A--Z对应65--90
a--z对应97--122
可以直接对char类型的变量进行加减的操作
比如:
int one,two = a;
则
one = two-32;
此时printf("%c,%d",one,one);将输出A,65
程序输出字符还是数字,是通过%c、%d来控制的。
知道这些以后,我想你应该很容易就能做出来了
A--Z对应65--90
a--z对应97--122
可以直接对char类型的变量进行加减的操作
比如:
int one,two = a;
则
one = two-32;
此时printf("%c,%d",one,one);将输出A,65
程序输出字符还是数字,是通过%c、%d来控制的。
知道这些以后,我想你应该很容易就能做出来了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
剽窃一楼的想法 写了个
#include<stdio.h>
#include<string.h>
void jiami(char *s,int num);
int main()
{
char str[20];
int num;
printf("输入字符串:");
scanf("%20s",str);
printf("\n输入移动位数:");
scanf("%d",&num);
jiami(str,num);
return 0;
}
void jiami(char *s,int num)
{
char *ss=s;
while(*s!='\0')
{
*s=(*s)%122+num; //算法错误 不好意思 我再想想
s++;
}
s=ss;
printf("\n加密后的字符串 %s\n",s);
}
#include<stdio.h>
#include<string.h>
void jiami(char *s,int num);
int main()
{
char str[20];
int num;
printf("输入字符串:");
scanf("%20s",str);
printf("\n输入移动位数:");
scanf("%d",&num);
jiami(str,num);
return 0;
}
void jiami(char *s,int num)
{
char *ss=s;
while(*s!='\0')
{
*s=(*s)%122+num; //算法错误 不好意思 我再想想
s++;
}
s=ss;
printf("\n加密后的字符串 %s\n",s);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ACM题汗
用取模的方法 你那个数%25就是+A就是了
往回算的时候用你那个数 减去 %25
用取模的方法 你那个数%25就是+A就是了
往回算的时候用你那个数 减去 %25
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询