電気通信大学 情報理工学部 情報通信工学科
情報通信システム実験第二B / 電子情報システム実験第二B (2012年度後期)
実験課題「情報通信(情報セキュリティ)」
参考プログラム(実行ファイルはmac上でコンパイルしたもの)
以下に示すプログラムのソースファイルと実行ファイルを,
実験課題のプログラム作成の参考に利用しても構わない。
- プログラムのリスト
-
ファイルコピーをする
プログラム a2a.c
指定したファイルからデータを読み出す、
または、指定したファイルにデータを書き込む、
というファイル操作方法が分からない場合は、
このプログラムソースを参照するとよい。
-
大(小)文字を小(大)文字に変換する
プログラム a2A.c
-
シフト暗号の
プログラム例 shift.c
-
RSA暗号のプログラムの
実行ファイル rsa.out
-
素数を求めるプログラムの
実行ファイル prime.out
-
拡張ユークリッド法を実行し、最大公約数を求めるプログラムの
実行ファイル gcd.out
-
最小公倍数を求めるプログラムの
実行ファイル lcm.out
-
与えられた正整数 L に対し、gcd(e,L)=1 かつ 1< e < L を満たす e を
すべて求めるプログラムの
実行ファイル findinge.out
- プログラムの使用方法を簡単に示す。
- 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 コマンドでファイル内容の比較(差分をとる)
>
- 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
>
- shift.c : シフト暗号の実行例 (共通鍵 k=7)
> gcc -o shift.out shift.c <--- オプション -o で実行ファイル名 shift.out を指定して,コンパイルする
> cat foo <--- catコマンドでファイの中身を確認
The University of Electro Communications
> ./shift.out -e 7 foo goo <--- 暗号化 オプション -e, 鍵 7, 入力ファイル名(平文):foo, 出力ファイル名(暗号文):goo
> cat goo
Aol Bupclyzpaf vm Lsljayv Jvttbupjhapvuz
> ./shift.out -d 7 goo hoo <--- 復号化 オプション -d, 鍵 7, 入力ファイル名(暗号文):goo, 出力ファイル名(推定平文):hoo
> cat hoo
The University of Electro Communications
> 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).
>
(2012/04/11)
cc:~/sun/doc/jikken/jikken2012 prog
8wubu:~/doc/jikken/2012/doc2012 tex