文本串加密和解密程序。一个文本串可用事先给定的字母映射表进行加密
前情提要
设字母映射表为:
a b c d e f g h i j k l m n o p q r s t u v w x y z
n g z q t c o b m u h e l k p d a w x f y i v r s j
测试数据:encrypt 加密后tkzwsdf
将输入的文本串进行加密后输出,然后进行解密并输出。
代码实现
#include<stdio.h>
#include<string.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize];
int length;
}HString;
void StrAssign(HString &T,char *chars)//生成一个其值等于串常量chars的串T
{
int i=0;
for(;chars[i]!='\0';i++)
{
T.data[i]=chars[i];
}
T.length=i;
}
void DispStr(HString s)
{
int i;
if(s.length>0)
{
for(i=0;i<s.length;i++)
printf("%c",s.data[i]);
printf("\n");
}
}
HString EnCrypt(HString A,HString B,HString T)//输入字母映射表和要加密的串
{
int i=0,j;//j为A串中的下标
HString str;//创建新串,为T加密后的串
while(i<T.length)
{
for(j=0;T.data[i]!=A.data[j];j++);
if(j>=A.length)printf("出错了!");
else str.data[i]=B.data[j];
i++;
}
str.length=T.length;
return str;
}
HString UnEncrypt(HString A,HString B,HString T)//输入字母映射表和要解密的串
{
int i=0,j;
HString str;
while(i<T.length)
{
for(j=0;T.data[i]!=B.data[j];j++);
if(j>=A.length)printf("出错了!");
else str.data[i]=A.data[j];
i++;
}
str.length=T.length;
return str;
}
int main()
{
HString A,B,S2,S1,S3;
char str[MaxSize];
StrAssign(A,"abcdefghijklmnopqrstuvwxyz");
StrAssign(B,"ngzqtcobmuhelkpdawxfyivrsj");
printf("请输入要加密的串>>");
gets(str);
StrAssign(S1,str);
S2=EnCrypt(A,B,S1);
printf("加密后>>");
DispStr(S2);
printf("解密后>>");
S3=UnEncrypt(A,B,S2);
DispStr(S3);
}
输出