13. juni 2002 - 10:41Der er
14 kommentarer og 1 løsning
Modulo overflow
Hej!
Vi sidder og skal lave et program der kan kryptere efter RSA public key systemet. Vi er imidlertid stødt ind i problemet med store tal der forårsager overflow når vi udfører modulo funktionen. Microsoft har et forslag, men det virker ikke, hvis tallet bliver ekstremt stort.
Nogen forslag til, hvordan vi løser dette problem ?
Sørg for at smide de tal i bruger ind i doubles så risikere i ikke at der sker overflow fordi en tal værdi bliver betragtet som en integer og der herefter sker en explicit konvertering til integer, der kan resultere i eet overflow
Dim e As Variant, n As Variant, y As Variant, x As Variant
e = 5 n = 35
'txtInput = 101 y = txtInput ^ e 'Int(y/n) giver hel tals værdien af divisionen 'Ved at gange med n og derefter trække dette fra det oprindelige 'tal finde resten! x = (y - (Int(y / n) * n))
Og dog, vi kan kun bruge kryptere tal mellem 1 og ca 30, alt afhænging af vores valg af e og n!
for M = 5, e = 7, d = 103, n = 143 Kryptering M^e mod n = Mkryp Dekryptering Mkryp^d mod n MKryp = 47 Problemet opstår når vi skal dekryptere vilket skal give 5 igen, men giver 0, tror det er den lille forskel i langt ude decimaler??????
'Option Explicit Dim phi, p, q, w As Variant Public n, d, e As Variant Private Sub cmdDeKrypter_Click() y = (txtOutput.Text) ^ d Label1.Caption = (y - (Int(y / n) * n)) * 1 End Sub Private Sub cmdKrypter_Click() y = (txtInput.Text / 1) ^ e 'Int(y/n) giver hel tals værdien af divisionen 'Ved at gange med n og derefter trække dette fra det oprindelige 'tal finde resten! txtOutput.Text = (y - (Int(y / n) * n)) End Sub Function gcd(i, j) As Integer If i = 0 Then gcd = j Else gcd = gcd(j Mod i, i) End If End Function Private Sub Form_Load() p = 13 q = 11 n = p * q phi = (p - 1) * (q - 1)
e = 2 While gcd(e, phi) <> 1 e = e + 1 Wend MsgBox e d = 2 While (d * e Mod phi) <> 1 d = d + 1 Wend MsgBox d
2 tekstfelter (et med input og et med krypteret værdi), 2 knapper (krypter og dekrypter) og 1 label (viser det dekrypterede skal gerne være lig input)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.