字符串中字符的种类,按照ASCII码编码来说有256种,而普通数字每位只有10种,那么编码后的数字字符串必然要比编码前长,比如说是之前的3倍长。
最简单的方法是直接将每个字符的ASCII码用ASCII码取值写出来,比如大写字母A的ASCII码是65,那么就写成065,3个一组表示一个字符;再想加密可以在这个3位数上进行运算,采用比如全都加一个数之类的方法。
你的文章是TXT格式或者是DOC格式,你打完后重命名改为别的格式,比如rar等等,当你在想看到的时候在重命名改回来就可以了,
不过有的电脑默认的扩展名是隐藏的,打开我的电脑, 工具,文件夹选项,查看隐藏已知文件扩展名前面对号去掉就可以了。
这里面用到的大部分都是对字符串的基本操作。谭浩强C语言书上都能找到的。里面我都有注释了。有什么疑问再说
#include stdio.h
#include string.h
#include stdlib.h
#include ctype.h
int key[3][3]={6,24,1 , //密钥
13,16,10 ,
20,17,15 ,};
int prech(char a[],char b[][3]) //预处理,返回明文的组数
{
int i=0,j=0;
for (; *a!='\0'; ++a)
if (isalpha(*a)) //isalpha判断是否为字母
{
b[i][j]=tolower(*a)-'a'; //b[][]存放每一组明文,3个字母为一组。tolower函数是把大写变小写,并-a使之变成对应的数字
++j;
if (j==3)
{
j=0;
++i;
}
}
while(j!=3 j!=0) //后面不够的用a补齐
{
b[i][j]=0;
j++;
}
return i;
}
void solve(char b[][3],int n) //求密文
{
int i,j;
char c[3];
for(i=0;in;i++)
{
for(j=0;j3;j++) //算出b[i]组的值存放到c数组中
{
c[j]=(b[i][0]*key[j][0]+b[i][1]*key[j][1]+b[i][2]*key[j][2])%26+'A';
}
for(j=0;j3;j++)
b[i][j]=c[j]; //把c数组的内容还给b[i]组
}
return ;
}
int main(void)
{
int len,i,j;
char s[100]; //明文
char b[40][3]; //3个为一组,存放每一组的字母对应的数字
scanf("%s",s);
len=prech(s,b);
solve(b,len);
for(i=0;ilen;i++)
for(j=0;j3;j++)
printf("%c",b[i][j]);
printf("\n");
return 0;
}
有中非常简单可行的方法
你的文章是TXT格式或者是DOC格式
你打完后重命名改为别的格式,比如rar等等
当你在想看到的 时候在重命名改回来就可以了
不过有的电脑默认的扩展名是隐藏的
打开我的电脑, 工具---文件夹选项----查看----隐藏已知文件扩展名 前面对号去掉就可以了