暗号技術 ~JAVAプログラム②~ (6週目)

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

プログラミング第5回 1 while ループ 文字列の操作
1 例題 ex3b ( 配列 ) 科学科プログラミング. 2 例題 : ex3b  以下の 3 つについて例題を進める ステップ 1 :配列 ステップ 2 :最小と最大 ステップ 3 :文字型の配列.
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
黒澤 馨 (茨城大学) 情報セキュリティ特論(4) 黒澤 馨 (茨城大学) 2017/3/4 confidential.
プログラミング基礎I(再) 山元進.
IO - 入出力 小西 亨.
プログラミング基礎I(再) 山元進.
Applet 岡部 祐典 鈴木 敬幸.
プログラミング基礎I(再) 山元進.
とても使いやすい Boost の serialization
アルゴリズムとプログラミング (Algorithms and Programming)
とても使いやすい Boost の serialization
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
C言語 配列 2016年 吉田研究室.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
独習Java ・ 12.1  インターネットアドレス ・ 12.2  サーバーソケットとソケット  12月 19日    小笠原 一恵.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
数 学 の か た ち 第3講 暗号を作ろう 早苗 雅史 数学とソフトウエア
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
情報処理技法 (Javaプログラミング)2 第2回 前期の復習(2)
JAVA入門② 変数と型 式と演算子 制御文.
暗号技術 ~公開鍵暗号方式の仕組み~ (3週目)
第10回 情報セキュリティ 伊藤 高廣 計算機リテラシーM 第10回 情報セキュリティ 伊藤 高廣
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
プログラミング言語入門 手続き型言語としてのJava
数学のかたち 暗号を作ろう Masashi Sanae.
JAVA入門.
サブゼミ第9回 実装編③ 永続化とjava.ioパッケージ.
UDPマルチキャストチャット                    空川幸司.
例外処理 と ファイル入出力 情報システム学科 平塚 聖敏.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
リファレンスの復習と例外処理 2005年6月14日 海谷 治彦.
暗号技術 ~JAVAプログラム③~ (7週目)
暗号技術 ~JAVAプログラム①~ (5週目)
画像処理プログラムの説明.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
5.RSA暗号 素因数分解の困難性を利用した暗号.
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
暗号技術 ~暗号技術の基本原理~ (1週目) 情報工学科  04A1004 石川 真悟.
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
ソフトウェア制作論 平成30年11月21日.
計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例
「情報セキュリティ論」 2-4 公開鍵暗号の原理とRSA暗号
アルゴリズムとプログラミング (Algorithms and Programming)
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
アルゴリズムとプログラミング (Algorithms and Programming)
第8回 データを収納する (スタックとキュー)
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
ネット時代のセキュリティ3(暗号化) 2SK 情報機器工学.
JAVA入門⑥ クラスとインスタンス.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
暗号技術・セキュリティ 情報工学科  04A1004 石川 真悟.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
アルゴリズムとデータ構造1 2007年7月6日
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
情報処理技法(Javaプログラミング)1 第8回 同じ処理を何回も繰り返すには?
Presentation transcript:

暗号技術 ~JAVAプログラム②~ (6週目) 石川 真悟

RSAの暗号化処理(公開鍵暗号) 平文の値を「E」回掛け合わせ、この結果の値を「N」で割り、余りの 値を求める。この計算結果が暗号文になる。「E」と「N」は公開鍵の 値になる。 暗号文=平文 mod N E 例)平文12、E=5、N=221 暗号文=12 mod 221 暗号文=207 平文 公開鍵 5 E N 暗号化処理 暗号文=平文 mod N E 暗号化処理そのものは、 とてもシンプルだが、 秘密鍵の情報がわからない限り、 現実的な時間で解読するのは困難 暗号文

公開鍵と秘密鍵は対(ペア)になっている必要があり、この2つのキーのことをキーペアと呼 ぶ。 キーペアの生成手順 公開鍵と秘密鍵は対(ペア)になっている必要があり、この2つのキーのことをキーペアと呼 ぶ。 PとQを使ってNを計算する N=PxQ L=1cm(P-1,Q-1) P-1とQ-1の最小公倍数 PとQを使ってLを計算する 1<E<L god(E,L)=1 EとLの最大公約数が1になるEを求める Lを使ってEを計算する EとLを使ってDを計算する E x D mod L =1 EとDを掛けmodLを計算した値が 1になるようにDを求める

キーペアの生成の具体例 まずPとQの2つの素数を用意(説明を簡単にするため小さい数字で行なう) P=13、Q=17 N=PxQ=13x17=221 L=1cm(P-1,Q-1)=1cm(13-1,17-1)=1cm(12,16) 12と16の最小公倍数は48なのでL=48 1<E<L  god(E,L)=1 God(E,48)=1 Eと48の最大公約数が1になるようなEを求める。 E=5,7,11,13,17,19,23,25,29,31,35,37,41,43,47 この中から素数を1つを選ぶ。ただし、25、35は素数ではないので外す。 仮に5を選ぶ。 ExD mod L=1 5xD mod 48=1 D=29

現時点までにできているプログラムの説明 1:import java.io.*; //ファイルへの入出力を扱う 2: import java.util.*; //ファイルを読み込む 3: 4:class   FileOpen4 5:{ 6: public static void main(String[] args) throws IOException 7: { 8: BufferedReader br; //バッファからデータを取り出すために使うクラス 9: 10: br=new BufferedReader(new 11: InputStreamReader(System.in)); //キーボードから入力したバイト単位のデータを文字として読み込んで //バッファにためる為のオブジェクトを生成し、そのオブジェクトに //BufferedReader型の変数brでアクセスできるようにする 12: System.out.print(“ファイル名をタイピングしてください:"); 13: 14: String filename=br.readLine(); //filenameにキーボードから入力した文字列を格納 15: br=new BufferedReader(new FileReader(filename)); //filenameの中身をbrに持たせる

16: String str; 17: int k=0; 18: int count=0,tmp; 19: final int bit=0x0001; //finalをつけると値を変更できなくなる 20: char[] cary; //caryを2バイトの文字を表すchar型の配列で定義 21: while((str=br.readLine())!=null) //str=br.readLine()がnullになるまで繰り返す 22: { 23: System.out.println(count+":"+str); 24: 25: cary=str.toCharArray(); //与えられたString型の文字列strを1文字ずつに分けて //char型の配列caryに格納 26: System.out.print(count+":"); 27: for(int i=0;i<cary.length;i++) 28: { 29: for(int j=0;j<16;j++) 30: {

31: tmp = cary[i]&(bit<<(15-j));        //求める。<<は左に15-j動かし右から0を15-j付け足す 32: tmp >>= 15-j //>>=は15-j右にシフトする 33: if(tmp==1) 34: { 35: System.out.print("1"); 36: k = 16-j; //左から16、15、…1 37: } 38: else 39: { 40: System.out.print("0"); 41: k = 0; 42: } 43: sum += k; //16ビットで1のあるとこの数の合計 44: } 45: System.out.print("["+cary[i]+"] "); 46: System.out.println("sum="+ sum +" ");

47: System.out.println(); 48: count++; 49: } 50: br.close(); 51: 52: System.out.println("2つの素数P,Qを入力してください。"); 53: br=new BufferedReader(newInputStream Reader(System.in)); 54: System.out.print("P="); 55: String str1 = br.readLine(); 56: System.out.print("Q="); 57: String str2 = br.readLine(); 58: System.out.println("P="+ str1 + ",Q="+ str2); 59: int p, q, n; 60: p = Integer.parseInt(str1); 61: q = Integer.parseInt(str2); 62: n = p * q; 63: System.out.println("N="+ n); 64: int f, m, a, b; 65: a = p-1; 66: b = q-1;

67: int d=1, l; 68: if(p>q) 69: { 70: f = a % b; 71: if(f==0) 72: { 73: l = a; 74: System.out.println("L="+ l); 75: } 76: else 77: { 78: do 79: { 80: d++; 81: l = a * d; 82: f = l % b; 83: 84: }while(f!=0); 85: System.out.println("L="+ l); 86: } 87: }

88: else if(p<q) 89: { 90: m = b % a; 91: if(m==0) 92: { 93: l = b; 94: System.out.println("L="+ l); 95: } 96: else 97: { 98: do 99: { 100: d++; 101: l = b * d; 102: m = l % a; 103: }while(m!=0); 104: System.out.println("L="+ l); 105: } 106: }

107: else if(p==q) 108: { 109: l = a; 110: System.out.println("L="+ l); 111: } 112: else 113: System.out.println("エラーです。"); 114: } 115:}

実行例