ここから本文です

Excel VBAの勉強の一環としてRSA暗号の解読プログラムを組んでいるものです。 多...

fai********さん

2013/1/3114:43:49

Excel VBAの勉強の一環としてRSA暗号の解読プログラムを組んでいるものです。
多倍長演算について質問です。

Excel VBAの勉強の一環としてRSA暗号の解読プログラムを組んでいるものです。
多倍長演算について質問です。
プログラムを作ることはできたのですが、扱える桁数が小さく実際にRSA暗号が使われる現場を想定するとどうしても不満が残ります。多倍長演算を使うことで大きい桁数まで扱えることがわかったのですが実際に組んだプログラムにどのようにして多倍長演算を組み込むのかわかりません。アドバイスを求めます。
以下実際のプログラムです。
'素因数分解'
n = Range("f1").Value
x = Sqr(n)
x = Fix(x)
sore = Abs(x ^ 2 - n)
y = Sqr(sore)


Do While x ^ 2 - y ^ 2 - n <> 0
x = x + 1
y = Sqr(x ^ 2 - n)
y = Fix(y)
If x > n Then MsgBox "素因数分解できません": Exit Do
Loop

p = x + y
q = x - y

Range("c3").Value = p
Range("c4").Value = q

'dの計算'
Dim m As Double
Dim kazu1 As Double
Dim kazu2 As Double

d = 0
e = Range("d1")
m = (p - 1) * (q - 1)

kazu1 = e
kazu2 = m


Do Until kazu1 = kazu2

If kazu1 > kazu2 Then
kazu1 = kazu1 - kazu2

Else
kazu2 = kazu2 - kazu1

End If
Loop

If kazu1 <> 1 Then
MsgBox "eと(p-1)(q-1)が互いに素じゃないからやりなおして"
Exit Sub
End If


Do Until (e * d) - m * Fix(e * d / m) = 1
d = d + 1
Loop

お願いします。

閲覧数:
608
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

sta********さん

2013/2/206:06:15

解決のヒントになれば。。

イミディエイトウインドウで試してみて下さい。

100000*100000 → オーバーフロー

CDbl(100000)*100000 → 10000000000 と計算できる


CDbl関数で倍精度浮動小数点数型に変換してやると、倍精度で計算できます。
CDbl(100000)*CDbl(100000) とする必要があるように見えますが、片方でも倍精度になっていればOKのようです。

コードは実行していませんが、オーバーフローするのは
m = (p - 1) * (q - 1) あたりでしょうか??

mは確かにDouble型になっていますが、(p - 1) * (q - 1) の段階でオーバーフローしてしまえばエラーになります。

m = CDbl(p - 1) * (q - 1) と変えてみてはどうでしょうか?

ご参考までに。

この回答は投票によってベストアンサーに選ばれました!

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる