vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: RSA-Verschluesselung und Mod 
Autor: Dirk
Datum: 30.09.08 12:32

Hier mal ein Code dafür, leider nicht ganz so einfach, wie die die Wiki-Seite vermuten ließ. Da das von dir angegebene Modulo recht groß ist, tritt bei der Multiplikation (bzw. ^2) ein Überlauf auf. Deswegen musste ich noch die split_mod Funktion schreiben.

Alles mit der heißen Nadel, ich hab's für ein paar Werte geprüft. Zur Überprüfung des Ergebnisses habe ich folgende Seite herangezogen: http://www.math.umn.edu/~garrett/crypto/a01/FastPow.html

Viel Spaß !

Private Const gc_MaxLongValue As Long = 2147483647
 
Private Function RSA_Mod( _
    ByVal vBasis As Long, _
    ByVal vExp As Long, _
    ByVal vMod As Long _
  ) As Long
 
 
'''    * a ... Basis (Zahl, die potenziert werden soll)
'''    * c ... Exponent
'''    * b ... Binärdarstellung von c, wobei das höchstwertige Bit an der 
' Stelle 0 steht
'''            und das niedrigstwertige Bit an der Stelle n; (b hat n+1 Ziffern)
'''    * m ... Modulus
 
 
'''res = 1
''' for i=1..n
'''    res = res ^ 2 Mod m
'''    if b_i = 1
'''       res = (res * a) Mod m
'''    end-if
''' end-for
 
  Dim numBits As Long
  Dim bits_Exp() As Long
 
On Error GoTo err_handler
 
  numBits = Int(Log(vExp) / Log(2) + 1#)
 
  ReDim bits_Exp(1 To numBits)
 
  Dim tmp As Long
  Dim i As Long
  tmp = vExp
  'lowest bit --> highest position
  For i = numBits To 1 Step -1
    bits_Exp(i) = tmp Mod 2
    tmp = tmp \ 2
  Next i
 
  RSA_Mod = 1
  For i = 1 To numBits
 
    If (CDbl(RSA_Mod) * CDbl(RSA_Mod)) > gc_MaxLongValue Then
 
      RSA_Mod = split_mod(RSA_Mod, RSA_Mod, vMod)
 
    Else
      RSA_Mod = (RSA_Mod * RSA_Mod) Mod vMod
    End If
 
    If bits_Exp(i) = 1 Then
 
      If (CDbl(RSA_Mod) * CDbl(vBasis)) > gc_MaxLongValue Then
        RSA_Mod = split_mod(RSA_Mod, vBasis, vMod)
      Else
        RSA_Mod = (RSA_Mod * vBasis) Mod vMod
      End If
 
    End If
 
  Next i
 
 
 
 
  GoTo endproc
err_handler:
  Debug.Print Err.Description
  Debug.Assert False
 
  GoTo endproc
err_debug:
  Resume
endproc:
 
End Function
 
 
Private Function split_mod( _
    ByVal vf1 As Long, _
    ByVal vf2 As Long, _
    ByVal vMod As Long _
  ) As Long
 
  Dim split As Long
  Dim sum As Long
  Dim j As Long
  Dim i As Long
 
  Dim dbltmp As Double
 
  On Error GoTo err_handler
 
 
  dbltmp = CDbl(vf1) * CDbl(vf2)
 
  split = Int(Log(dbltmp) / Log(2) + 1#) ^ 2
 
  ReDim f1(1 To split) As Long
  ReDim f2(1 To split) As Long
 
  sum = 0
 
  f1(1) = vf1 \ split
  sum = f1(1)
  For j = 2 To split - 1
    f1(j) = f1(1)
    sum = sum + f1(1)
  Next j
  f1(split) = vf1 - sum
 
  f2(1) = vf2 \ split
  sum = f2(1)
  For j = 2 To split - 1
    f2(j) = f2(1)
    sum = sum + f2(1)
  Next j
  f2(split) = vf2 - sum
 
  sum = 0
  For i = 1 To split
    For j = 1 To split
      sum = (sum + (f1(i) * f2(j))) Mod vMod
    Next j
  Next i
  split_mod = sum
 
 
  GoTo endproc
err_handler:
  Debug.Print Err.Description
  Debug.Assert False
 
  GoTo endproc
err_debug:
  Resume
endproc:
 
End Function

Gruß
Dirk

--
?Get it right the first time

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
RSA-Verschluesselung und Mod1.867KP27.09.08 15:14
Re: RSA-Verschluesselung und Mod980ModeratorDieter28.09.08 10:56
Re: RSA-Verschluesselung und Mod861KP28.09.08 12:30
Re: RSA-Verschluesselung und Mod879Dirk29.09.08 08:49
Re: RSA-Verschluesselung und Mod875KP29.09.08 13:17
Re: RSA-Verschluesselung und Mod837Dirk29.09.08 14:16
Re: RSA-Verschluesselung und Mod901KP30.09.08 09:34
Re: RSA-Verschluesselung und Mod999Dirk30.09.08 10:17
Re: RSA-Verschluesselung und Mod1.076Dirk30.09.08 12:32
Re: RSA-Verschluesselung und Mod840KP30.09.08 12:32
Re: RSA-Verschluesselung und Mod882Dirk30.09.08 12:38

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel