2010年2月25日木曜日

シーザー暗号を造るプログラム003

/*暗号化前の文字列に日本語や空白は入れられないが、「,」と「.」と「?」と「!」と空白の代わりに「&」を入れることで解決する方法が出来ました。具体的には下記の様になります。(ブログスポットのHTMLの性質上そのままでは表示されない文字列<stdio.h>があります。<と>を半角に書き直してご使用ください。)*/
#include <stdio.h>

#define LEN 255

int main(void)
{
char string[LEN];
char ango[LEN];
int key, n, i;

printf("平文を入力(英大小文字と,と.と?と!と&のみ):");
scanf("%s", string);
printf("鍵を入力:");
scanf("%d", &key);

i = 0;
while (string[i] != 0) {
if (('a'<=string[i])&&(string[i]<='z')) {
n = (string[i] - 'a' + key + 26) % 26;
ango[i] = 'a' + n;
} else if (('A'<=string[i])&&(string[i]<='Z')) {
n = (string[i] - 'A' + key + 26) % 26;
ango[i] = 'A' + n;
} else if (string[i] == ',') {
ango[i] = ',';
} else if (string[i] == '.') {
ango[i] = '.';
} else if (string[i] == '?') {
ango[i] = '?';
} else if (string[i] == '!') {
ango[i] = '!';
} else if (string[i] == '&') {
ango[i] = '&';
} else {
printf("文字が違います");
break;
}
i++;
}
ango[i] = 0;
printf("暗号文:%s\n", ango);

return 0;
}

/*このプログラムをsiezer003.cと名前を付けてホームフォルダに保存し、
Linux端末で

$gcc siezer003.c -o siezer003.out

とコンパイルし、Linux 端末で

$./siezer003.out

とすれば

「平文を入力」

と出て来るので英文を入力(空白の代わりに&を入力)し、ENTERキー

次に

「鍵を入力」

と出て来るので-26から26までの半角数字を入力、ENTERキーで暗号化後の文字列が表示されます。*/

0 件のコメント: