Avatar billede adamga Nybegynder
13. juni 2002 - 10:41 Der 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 ?
Avatar billede nicidem Nybegynder
13. juni 2002 - 10:42 #1
Du kom til at oprette 2 spørgsmål... Luk det ene ;)
Avatar billede nolle_k Nybegynder
13. juni 2002 - 10:49 #2
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

Dvs.

Lad være med at sige
  a = b mod 10

med sig i stedet for

dim a as double
dim b as double
dim c as double

c = 10

a = b mod c
Avatar billede adamga Nybegynder
13. juni 2002 - 11:00 #3
Vi har nu også smidt vores tal ind i doubles.
Herunder et udsnit af vores kode, e og n er tildelt værdier.

Public n As Double
Dim y,e As Double
y = Asc(txtInput.text) ^ e
txtOutput.text = y Mod n

y er lig 10510100501 og n er lig 35
Avatar billede nolle_k Nybegynder
13. juni 2002 - 11:03 #4
Og det giver overflow???

Hvad er værdierne for e, n og txtInput.txt!!??

Stik mig nogle værdier, der giver overflow??
Avatar billede adamga Nybegynder
13. juni 2002 - 11:05 #5
ok....

e = 5
txtInput = 101
n = 35

y = 101 ^ 5 = 10510100501
txtOutput = 10510100501 Mod 35

Det giver overflow.
Avatar billede nolle_k Nybegynder
13. juni 2002 - 11:15 #6
Prøv denne ligning i stedet for

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))
 

Prøv om ikke det funger!
Avatar billede adamga Nybegynder
13. juni 2002 - 11:20 #7
Jotak.... det virker nu..
Avatar billede adamga Nybegynder
13. juni 2002 - 12:12 #8
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??????
Avatar billede adamga Nybegynder
13. juni 2002 - 12:19 #9
Hvor langt går variant? vi er kommet op på 10^170, det burde kunne klares ik, eller hvad med den der Int(y/n) kan den klare så stort et y???
Avatar billede nolle_k Nybegynder
13. juni 2002 - 12:27 #10
Jeg ved det faktisk ikke!! Det må være en undersøgelse værd!
Avatar billede adamga Nybegynder
13. juni 2002 - 12:29 #11
Er du på den sag - eller.....?
Kan du få det til at virke med andet?
Avatar billede nolle_k Nybegynder
13. juni 2002 - 12:46 #12
Jeg vil godt undersøge det men det bliver desværre ikke lige nu!!!

Kom med et par eksempler, der giver et forkert resultat! Så har jeg i hvert fald noget at gå i gang med!
Avatar billede adamga Nybegynder
13. juni 2002 - 12:49 #13
Du kan lige se på programmet, hvis du gider...

'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

End Sub
Avatar billede nolle_k Nybegynder
13. juni 2002 - 12:52 #14
Hvad skal der laves af knapper og lign??
Avatar billede adamga Nybegynder
13. juni 2002 - 13:01 #15
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)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester