電気通信大学 情報理工学部 情報通信工学科
情報通信システム実験第二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暗号のプログラムの 実行ファイル rsa.out
    5. 素数を求めるプログラムの 実行ファイル prime.out
    6. 拡張ユークリッド法を実行し、最大公約数を求めるプログラムの 実行ファイル gcd.out
    7. 最小公倍数を求めるプログラムの 実行ファイル lcm.out
    8. 与えられた正整数 L に対し、gcd(e,L)=1 かつ 1< e < L を満たす e を
      すべて求めるプログラムの 実行ファイル findinge.out

  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. a2A.c :ファイル名 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
      >

    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).
      >


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