« 歌うたいのバラッド | トップページ | 壁紙を変えてみた・・・ »

2010年2月25日 (木)

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

/*暗号化前の文字列に日本語や空白は入れられないが、「,」と「.」と「?」と「!」と空白の代わりに「&」を入れることで解決する方法が出来ました。具体的には下記の様になります。*/
#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キー

次に

「鍵を入力:」

と出て来るので-32767~32767までの半角数字を入力、ENTERキーで「暗号文:暗号化後の文字列」が表示されます。

英文以外を入力すると「文字が違います。」とエラーの表示も出ます。*/

にほんブログ村 IT技術ブログへ
にほんブログ村

|

« 歌うたいのバラッド | トップページ | 壁紙を変えてみた・・・ »

プログラミング言語」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: シーザー暗号を造るプログラム003:

« 歌うたいのバラッド | トップページ | 壁紙を変えてみた・・・ »