话不多说直接上代码(无指针,设有循环可循环加密解密):
#include <stdio.h>
#include <string.h>
#define m 100
#define n 20
void test();
int main() {
int s=1;
while(s){
int q,w=0;
printf("请选择加密/解密/退出(1/2/0)");
scanf("%d",&q);//选择需要的服务
getchar();
if(q==1){
test(w);
}
else if(q==2){
w=1;
test(w);
}
else if(q==0){
s=0;
}
else{
printf("输入错误请重新输入");
}
}
return 0;
}
void test(int w){//w是对加密还是解密的设置
char key[n], wordline[m];
int a[n];
int index = 0,i,p,k;
printf("请输入明文:");
gets(wordline);
printf("输入密钥:");
gets(key);
for(i=0;i<strlen(key);i++){
if(key[i] >= 'A' && key[i] <= 'Z')
{
if(w=0){
a[i] = (key[i]-'A')%26;
}
else{
a[i] = 26-(key[i]-'A')%26;
}
}
else if(key[i] >= 'a' && key[i] <= 'z')
{
if(w==0){
a[i] = (key[i]-'a')%26;
}
else{
a[i] = 26-(key[i]-'a')%26;
}
}
}
p=strlen(key);
for(i=0; i<strlen(wordline); i++)
{
k=i%p;
if(wordline[i] >= 'A' && wordline[i] <= 'Z')
{
wordline[i] = ((wordline[i]-'A')+a[k])%26+'A';
}
else if(wordline[i] >= 'a' && wordline[i] <= 'z')
{
wordline[i] = ((wordline[i]-'a')+a[k])%26+'a';
}
}
if(w==0){
printf("加密后的密文:%s",wordline);
printf("\n");
}
else if(w==1){
printf("解密后的明文:%s",wordline);
printf("\n");
}
}
结果(截图):