電気通信大学 情報理工学部 情報通信工学科
情報通信システム実験第二B / 電子情報システム実験第二B

実験課題「情報通信(情報セキュリティ)」

参考プログラム

以下に示すプログラムのソースファイルと実行ファイルを,
実験課題のプログラム作成の参考に利用しても構わない。
ced において,次の手順で以下に示すファイルを入手できる:
  1. 作業用のディレクトリを作成する:
  2. >mkdir ~/jikkenRSA 
  3. 作業用のディレクトリに移動する:
  4. >cd ~/jikkenRSA/
  5. ファイルをコピーする:
  6. >cp /ced-home/staff/kurihara/prog/* .
以上.
  1. プログラムのリスト
    1. a2a.c(ファイルをコピーするプログラムのソースファイル)
      指定したファイルからデータを読み出す、 または、指定したファイルにデータを書き込む、
      というファイル操作方法が分からない場合は、 このプログラムソースを参照するとよい。
    2. a2AA.c(大(小)文字を小(大)文字に変換するプログラムのソースファイル)
    3. shift.c(シフト暗号のプログラムのソースファイル)
    4. rsa.out (RSA暗号のプログラムの実行ファイル)
    5. prime.out(素数を求めるプログラムの実行ファイル)
    6. gcd.out(拡張ユークリッド法を実行し、最大公約数を求めるプログラムの実行ファイル)
    7. lcm.out(最小公倍数を求めるプログラムの実行ファイル)
    8. findinge.out(与えられた正整数 L に対し、gcd(e,L)=1 かつ 1< e < L を満たす e を,すべて求めるプログラムの実行ファイル)

  2. プログラムの使用方法を簡単に示す。
    1. a2a.out : ファイル名 foo を ファイル名 goo にコピーする例。

      > gcc -o a2a.out a2a.c   //オプション -o で実行ファイル名 a2a.out を指定して,コンパイルする
      > cat foo   // catコマンドでファイの中身を確認
      The University of Electro Communications
      > ./a2a.out foo goo   //入力ファイルfoo、 出力ファイルgoo
      > cat goo
      The University of Electro Communications
      > diff foo goo   //diff コマンドでファイル内容の比較(差分をとる)
      >

    2. a2AA.c :ファイル名 foo の中の大(小)文字を小(大)文字に変換し、 ファイル名 goo に出力する例。

      > gcc -o a2AA.out a2AA.c   //オプション -o で実行ファイル名 a2AA.out を指定して,コンパイルする
      > cat foo    //catコマンドでファイの中身を確認
      The University of Electro Communications
      > ./a2AA.out foo goo    //入力ファイルfoo、 出力ファイルgoo
      > cat goo
      tHE uNIVERSITY OF eLECTRO cOMMUNICATIONS
      >

    3. shift.c : シフト暗号の実行例 (共通鍵 k=5)

      > gcc -o shift.out shift.c    //オプション -o で実行ファイル名 shift.out を指定して,コンパイルする
      > cat foo    //catコマンドでファイの中身を確認
      WEWILLMEETATCHOFUSTATION ABCDEFGHIJKLMNOPQRSTUVWXYZ
      > ./shift.out -e 5 foo goo    // 暗号化 オプション -e, 鍵 5, 入力ファイル名(平文):foo, 出力ファイル名(暗号文):goo
      > cat goo
      BJBNQQRJJYFYHMTKZXYFYNTS FGHIJKLMNOPQRSTUVWXYZABCDE
      > ./shift.out -d 5 goo hoo    // 復号化 オプション -d, 鍵 5, 入力ファイル名(暗号文):goo, 出力ファイル名(推定平文):hoo
      > cat hoo
      WEWILLMEETATCHOFUSTATION ABCDEFGHIJKLMNOPQRSTUVWXYZ
      > diff foo hoo
      >

    4. rsa.out : RSA暗号の実行例 : 公開鍵(9893,32399), 秘密鍵(7475,32399)

      > cat foo
      The University of Electro Communications
      > ./rsa.out -e 9893 32399 foo goo    // 暗号化 オプション -e, 公開鍵(9893,32399), 入力ファイル名(平文):foo, 出力ファイル 名(暗号文):goo
      > ./rsa.out -d 7457 32399 goo hoo    // 復号化 オプション -d, 秘密鍵(7475,32399), 入力ファイル名(暗号文):goo, 出力ファイル名(推定平文):hoo
      > cat hoo
      The University of Electro Communications
      > diff foo hoo
      > ls -la | grep oo
      -rw-r--r-- 1 xx faculty 41 4月 11日 17:57 foo
      -rw-r--r-- 1 xx faculty 82 4月 12日 08:34 goo
      -rw-r--r-- 1 xx faculty 41 4月 12日 08:34 hoo
      >

    5. prime.out : 100までの素数を求める実行例

      > ./prime.out 100
      ...start Finding Primes.
      ...Finding primes in the range [2,3, ... ,100]
      ------------
      2
      3
      5
      (中省略)
      97
      ------------
      The number of primes is 25
      ...end Finding Primes.
      >
      > ./prime.out 10000    // 10000までの素数を求める
      ...start Finding Primes.
      ...Finding prime in range [2,3, ... ,10000]
      ------------
      2
      3
      5
      (中省略)
      9973
      ------------
      The number of primes is 1229
      ...end Finding Primes.
      >

    6. gcd.out :拡張ユークリッド法と最大公約数を求める実行例(入力: 144,29)

      > ./gcd.out 144 29
      ...start finding gcd(144,29) and (f,g) such that f*(144)+g*(29)=gcd(144,29)

      Input : ( a, b ) = ( 144, 29 )
      Output : gcd( a, b ) = gcd( 144, 29 ) = 1
         : ( f, g ) = ( -1, 5 )

         such that ( f * a ) + ( g * b ) = gcd( a, b )
         that is ( -1 * 144 ) + ( 5 * 29 ) = 1
      ...end.
      >

    7. lcm.out : 最小公倍数を求める実行例(入力:16,18)

      > ./lcm.out 16 18
      ...start finding lcm(16,18)

      Input : ( a, b ) = ( 16, 18 )
      Output : lcm(a,b) = lcm(16,18) = (16*18) / gcd(16,18) = 144

          where 16*18=288 and gcd(16,18) = 2
      ...end.
      >

    8. findinge.out : 144に対し、gcd(e,144)=1 かつ 1< e < 144 を満たす e をすべて求める実行例

      > ./findinge.out 144
      ...start Computing keys by Euclid algorithm(Command Line version).
      ...Finding inegers e such that gcd(e,144)=1 and 1 < e < 144.
      5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49, 53, 55, 59, 61, 65, 67, 71, 73, 77, 79, 83, 85, 89, 91, 95, 97, 101, 103, 107, 109, 113, 115, 119, 121, 125, 127, 131, 133, 137, 139, 143,
      ...end Computing keys by Euclid algorithm(Command Line version).
      >

(update 2017/09/27)
(2014/09/01)
~/mac/doc/jikken/jikken2012/web/
(2012/04/11)
cc:~/sun/doc/jikken/jikken2012 prog
8wubu:~/doc/jikken/2012/doc2012 tex