電気通信大学 情報理工学部 情報通信工学科
情報通信システム実験第二B / 電子情報システム実験第二B
実験課題「情報通信(情報セキュリティ)」
参考プログラム
以下に示すプログラムのソースファイルと実行ファイルを,
実験課題のプログラム作成の参考に利用しても構わない。
ced において,次の手順で以下に示すファイルを入手できる:
- 作業用のディレクトリを作成する:
>mkdir ~/jikkenRSA
- 作業用のディレクトリに移動する:
>cd ~/jikkenRSA/
- ファイルをコピーする:
>cp /ced-home/staff/kurihara/prog/* .
以上.
- プログラムのリスト
-
a2a.c(ファイルをコピーするプログラムのソースファイル)
指定したファイルからデータを読み出す、
または、指定したファイルにデータを書き込む、
というファイル操作方法が分からない場合は、
このプログラムソースを参照するとよい。
-
a2AA.c(大(小)文字を小(大)文字に変換するプログラムのソースファイル)
-
shift.c(シフト暗号のプログラムのソースファイル)
-
rsa.out (RSA暗号のプログラムの実行ファイル)
-
prime.out(素数を求めるプログラムの実行ファイル)
-
gcd.out(拡張ユークリッド法を実行し、最大公約数を求めるプログラムの実行ファイル)
-
lcm.out(最小公倍数を求めるプログラムの実行ファイル)
-
findinge.out(与えられた正整数 L に対し、gcd(e,L)=1 かつ 1< e < L を満たす e を,すべて求めるプログラムの実行ファイル)
- プログラムの使用方法を簡単に示す。
- 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 コマンドでファイル内容の比較(差分をとる)
>
- 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
>
- 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
>
-
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
>
- 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.
>
-
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.
>
-
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.
>
-
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