aW50IG1haW4odm9pZCkKewogICAgICAgIGNoYXIgbWVzc2FnZVsyMF07CiAgICAgICAgaW50IG1vZGU7CiAgICAgICAgaW50IGtleTsKICAgICAgICBpbnQgaTsKCiAgICAgICAgcHJpbnRmKCZxdW90O+ODouODvOODiemBuOaKnu+8iOaal+WPt+WMlj0xLCDlvqnlj7c9Mu+8iVxuJnF1b3Q7KTsKICAgICAgICBwcmludGYoJnF1b3Q7LS0mZ3Q7ICZxdW90Oyk7CiAgICAgICAgc2NhbmYoJnF1b3Q7JWQmcXVvdDssICZhbXA7bW9kZSk7CgogICAgICAgIHByaW50ZigmcXVvdDvpjbXjgpLlhaXliptcbiZxdW90Oyk7CiAgICAgICAgcHJpbnRmKCZxdW90Oy0tJmd0OyAmcXVvdDspOwogICAgICAgIHNjYW5mKCZxdW90OyVkJnF1b3Q7LCAmYW1wO2tleSk7CgogICAgICAgIHN3aXRjaChtb2RlKSB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigmcXVvdDvlubPmlofjgpLlhaXliptcbiZxdW90Oyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigmcXVvdDstLSZndDsgJnF1b3Q7KTsKICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoJnF1b3Q7JXMmcXVvdDssIG1lc3NhZ2UpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigmcXVvdDvmmpflj7fmlofjga8gJnF1b3Q7KTsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUobWVzc2FnZVtpXSAhPSAnXDAnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCZxdW90OyVjJnF1b3Q7LCBtZXNzYWdlW2ldICsgKGNoYXIpa2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCZxdW90OyDjgafjgZnjgIJcbiZxdW90Oyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoJnF1b3Q75pqX5Y+35paH44KS5YWl5YqbXG4mcXVvdDspOwogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoJnF1b3Q7LS0mZ3Q7ICZxdW90Oyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCZxdW90OyVzJnF1b3Q7LCBtZXNzYWdlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoJnF1b3Q75bmz5paH44GvICZxdW90Oyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKG1lc3NhZ2VbaV0gIT0gJ1wwJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigmcXVvdDslYyZxdW90OywgbWVzc2FnZVtpXSAtIChjaGFyKWtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigmcXVvdDsg44Gn44GZ44CCXG4mcXVvdDspOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigmcXVvdDvnhKHlirnjgarjg6Ljg7zjg4njgafjgZnjgIImcXVvdDspOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7Cn0=
int main(void)
{
char message[20];
int mode;
int key;
int i;
printf("モード選択(暗号化=1, 復号=2)\n");
printf("--> ");
scanf("%d", &mode);
printf("鍵を入力\n");
printf("--> ");
scanf("%d", &key);
switch(mode) {
case 1:
printf("平文を入力\n");
printf("--> ");
scanf("%s", message);
i = 0;
printf("暗号文は ");
while(message[i] != '\0') {
printf("%c", message[i] + (char)key);
i++;
}
printf(" です。\n");
break;
case 2:
printf("暗号文を入力\n");
printf("--> ");
scanf("%s", message);
i = 0;
printf("平文は ");
while(message[i] != '\0') {
printf("%c", message[i] - (char)key);
i++;
}
printf(" です。\n");
break;
default:
printf("無効なモードです。");
break;
}
return 0;
}