- - PR -
DoJaでベキ乗剰余演算
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-28 12:20
携帯電話上で、1024bitのベキ乗剰余演算を行いたいのですが、DoJaでは、JavaのBigIntegetクラスは使うことはできませんよね?
ベキ乗剰余演算というのは、 c = m^e mod n (ただし,nは素数p,qの積) (mをe乗したものをnで割ったときの余りをcとする.) この場合はRSA暗号です。 そして,1024bitといったのは、nの部分なのです。 どなたか、1024bitのベキ乗剰余演算を携帯電話上で行う方法を知りませんでしょうか? よろしくお願い致します。 | ||||
|
投稿日時: 2006-09-28 13:26
BigIntegerと同様な多倍長計算を自分で書けばいいと思います。nativeメソッドを使わないといけない処理でもありませんし。 | ||||
|
投稿日時: 2006-09-28 13:29
やはり自分で書くしかないのですね・・・ どこかに参考になるようなサイトや、ソースコードが載っているサイトはないもんですかね〜 | ||||
|
投稿日時: 2006-11-01 12:40
奥村晴彦氏らによって書かれた「Javaによるアルゴリズム事典」に多倍長演算がのってたはず。購入して読んでみれば。
http://www.gihyo.co.jp/books/syoseki-contents.php/4-7741-1729-3 ちなみにソースコードだけなら、以下のサイトからダウンロードできます。 http://oku.edu.mie-u.ac.jp/~okumura/java-algo/ 追加: 回答先が http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34564&forum=13&3 の間違い。すまん。 [ メッセージ編集済み 編集者: かずくん 編集日時 2006-11-02 12:11 ] | ||||
|
投稿日時: 2006-11-01 13:05
c = m^e mod n (ただし,nは素数p,qの積)
だったら数学使ったら? | ||||
|
投稿日時: 2006-11-02 09:32
なるほど 中学生の数学ですね (226*620) mod 7 226=32*7+2 620=88*7+4 因数分解して 226*620=(32*7+2)*620 ((32*7+2)*620) mod 7 = (2*620) mod 7 = (2*(88*7+4)) mod 7 = (2*4) mod 7 すなわち (226*620) mod 7 = ((226 mod 7) * (620 mod 7) ) mod 7 ようするに 複数の数の積をnで割った余りは 複数の数をnで割った余りの積を、nで割った余り あとは簡単 declare c pls_Integer; m pls_Integer; e pls_Integer; n pls_Integer; begin m := 5; e := 20; n := 13*17; c := 1; for i in 1..e Loop c := mod(c*m,n); end Loop; DBMS_Output.Put_Line(c); DBMS_Output.Put_Line(mod(power(5,20),13*17)); end; / [ メッセージ編集済み 編集者: 明智重蔵 編集日時 2006-11-02 10:25 ] |
1