« Paint.NET | トップページ | アフィン暗号プログラム »

2007/11/18

シーザー暗号プログラム(その3)

今度は平文ファイルを読み込んで暗号化されたファイルを出力するように改造してみました。では早速ソースを

#include <stdio.h>

int main(void)
{
  int  key, code, input, output;
  FILE *fpi, *fpo;
  char file1[64], file2[64];

  printf("==============================\n");
  printf("平文ファイル:");   scanf("%s", file1);
  printf("暗号ファイル:");   scanf("%s", file2);
  printf("鍵を入力    :");   scanf("%d", &key);

  if( (fpi = fopen(file1, "r") ) == NULL){
    printf("Failure.\n");
  } else {
    if( (fpo = fopen(file2, "w") ) == NULL){
      printf("Failure.\n");
    } else {
      while( (input = fgetc(fpi)) != EOF ){
          if(input == ' '){
              fputc(input, fpo);
          } else {
              code   = (input - 'A' + key) % 58;
              output = 'A' + code;
              fputc(output, fpo);
          }
      }
      fclose(fpo);
    }
    fclose(fpi);
  }
  printf("==============================\n");
  
  return 0;
}

このプログラムは空白文字を暗号化せずにそのまま出力するようにしています。例えば、I like programingを暗号化するとM pmoi tvskveqmrkと出力されます。(ちゃんと空白をスルーしてくれていました)

シーザー暗号はこのくらいにして今度はアフィン暗号やRSA暗号に挑戦しようと思います。(これを応用すればアフィン暗号はすぐにできそう)

(追記): if(input == ' ') を if(input == ' ' || input == '.' || input == ',' || input == '\n') にすると基本的な英文と改行に耐えられるかと

|

« Paint.NET | トップページ | アフィン暗号プログラム »

C」カテゴリの記事

Algorithm」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: シーザー暗号プログラム(その3):

« Paint.NET | トップページ | アフィン暗号プログラム »