シーザー暗号プログラムを公開します
このプログラム・ソースが仮に「ango.c」だとすると
端末にて
$ gcc -o ango ango.c
$ ./ango
と実行してください
最初に暗号鍵がランダムに表示されます
暗号鍵を変更するときは
3番を押してください
ふつう入力データーを暗号データーにするときは
1番を押して、入力データーを入れてください
暗号データーを復号するには
2番を押して、暗号データーをいれてください
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define randomize() srand(time(NULL))
#define random(x) rand()%(x)
int menu();
void cipher();
void decode();
void keymodify();
char tableS[100]="7JjKk8LlZz9XxCcVvBbNnMmQqWw0EeRr1TtYy2UuIi3OoPp4AaSs5DdFf6GgHh!\"#$%&\'()*+,-./:;<=>?@[\\]^_{|}`";
/*空白はscanfで無効*/
char table[100];
int R;
int main(){
int i,j,k,n=1;
char t;
randomize();
R=random(10000);
printf("暗号鍵:%d\n",R);
strcpy(table,tableS);
srand(R);
for(i=0;i<3000;i++){
j=random(92);
k=random(92);
t=table[j];
table[j]=table[k];
table[k]=t;
}
while(n) n=menu();
return 0;
}
int menu(){
char t[100];
printf("0:終了 1:入力データを暗号に 2:暗号データを復号に\n");
printf("3:暗号鍵の変更 0〜3を入力: ");
scanf("%s",t);
if(t[0]=='1') cipher();
else if(t[0]=='2') decode();
else if(t[0]=='3') keymodify();
else{
printf("プログラムを終了します\n");
return 0;
}
return 1;
}
void cipher(){
char s[100];
int i,j,k;
printf("入力データ: ");
scanf("%s",s);
printf("暗号データ: ");
i=0;
while(s[i]!='\0'&&s[i]!='\n'&&i<100){
if('A'<=s[i]&&s[i]<='Z') j=s[i]-'A';
else if('a'<=s[i]&&s[i]<='z') j=s[i]-'a'+26;
else if('0'<=s[i]&&s[i]<='9') j=s[i]-'0'+52;
else if(0x21<=s[i]&&s[i]<=0x2f) j=s[i]-'!'+62;
else if(0x3a<=s[i]&&s[i]<=0x40) j=s[i]-':'+77;
else if(0x5b<=s[i]&&s[i]<=0x5f) j=s[i]-'['+84;
else if(0x7b<=s[i]&&s[i]<=0x7d) j=s[i]-'{'+89;
else j=92;
putchar(table[j]);
i++;
}
putchar('\n');
}
void decode(){
char s[100];
int i,j,k;
printf("暗号データ: ");
scanf("%s",s);
printf("復号データ: ");
i=0;
while(s[i]!='\0'&&s[i]!='\n'&&i<100){
j=0;
while(table[j]!=s[i]&&j<92) j++;
if(0<=j&&j<26) putchar('A'+j);
else if(26<=j&&j<52) putchar('a'+j-26);
else if(52<=j&&j<62) putchar('0'+j-52);
else if(62<=j&&j<77) putchar('!'+j-62);
else if(77<=j&&j<84) putchar(':'+j-77);
else if(84<=j&&j<89) putchar('['+j-84);
else if(89<=j&&j<92) putchar('{'+j-89);
else putchar('`');
i++;
}
putchar('\n');
}
void keymodify(){
int i,j,k,rr;
char t;
printf("暗号鍵を入力: ");
scanf("%d",&rr);
printf("暗号鍵:%d\n",rr);
strcpy(table,tableS);
srand(rr);
for(i=0;i<3000;i++){
j=random(92);
k=random(92);
t=table[j];
table[j]=table[k];
table[k]=t;
}
}
0 件のコメント:
コメントを投稿