AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Exponentieren und dann Modulo: große Zahlen
Thema durchsuchen
Ansicht
Themen-Optionen

Exponentieren und dann Modulo: große Zahlen

Ein Thema von tuxianer · begonnen am 16. Mai 2008 · letzter Beitrag vom 31. Mai 2008
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#41

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 19:10
leider erst ab D2006

> anderer Thread siehe Beitrag #15
$2B or not $2B
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#42

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 19:21
Zitat von himitsu:
Zitat von gammatester:
Das ist natürlich gerade für RSA völlig ungeeignet, da die wichtigste Routine, um die es in diesem Thread ja geht, nämlich eine ExpMod gänzlich fehlt.
na gut, dieses könnte man sich da notfalls noch nachrüsten.
@himitsu: ich meinte nicht Deine Routine, sondern das VLI.PAS. Da gibt's noch nicht mal eine Divisionsroutine.

Wenn Ihr also schon nicht die DEC-Routine nehmen wollt, empfehle ich selbstverständlich meine MPArith. Im Archiv ist eine RSA-Unit mit Padding etc. ZZ arbeitete ich an einem RSA-Update, daß via CRT ca. 4mal schneller ist.

Gruß Gammatester
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#43

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 19:29
@gammatester:
ich meinte da ja auch das VLI

Division kann man über 'ne Umkerung des Multiplikation regeln ... mach ich nicht anders (weils so schön einfach ist)

Modulo über 'ne Division+Multiplication+Subtraktion

Multiplicaion ist ja auch nur 'ne Mehrfache Addition



im Grunde führe ich alles auf eine Addition zurück.


abgesehn, daß VLI dank der dezimalen Operationen in einem dualen System wohl etwas langsamer sein dürfte.
$2B or not $2B
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#44

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 20:16
Zitat von himitsu:
@gammatester:
ich meinte da ja auch das VLI :angel2:

Division kann man über 'ne Umkerung des Multiplikation regeln ... mach ich nicht anders :stupid: (weils so schön einfach ist)

Modulo über 'ne Division+Multiplication+Subtraktion

Multiplicaion ist ja auch nur 'ne Mehrfache Addition



im Grunde führe ich alles auf eine Addition zurück.


abgesehn, daß VLI dank der dezimalen Operationen in einem dualen System wohl etwas langsamer sein dürfte.
Das ist theoretisch vielleicht OK, aber Performamce wirst Du damit nicht erreichen. Besonders
Zitat:
Modulo über 'ne Division+Multiplication+Subtraktion
dürfte eine mittlere Katastrophe werden, wenn mod beim modularem Potenzieren benutzt wird: Dann ist selbst meist eine normale mod-Funktion zu langsam und man benutzt Montgomery- oder Barret-Reduktion für allgemeine Zahlen; für spezielle Moduli kann man noch schneller Reduktionsverfahren benutzen.

Gruß Gammatester
  Mit Zitat antworten Zitat
tuxianer

Registriert seit: 16. Mai 2008
25 Beiträge
 
#45

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 21:29
ich habs jetzt in delphi2007 probiert:

Delphi-Quellcode:
[DCC Fehler] BigInt.pas(175): E2393 Ungültige Operatordeklaration
[DCC Fehler] BigInt.pas(175): E2029 Bezeichner erwartet, aber 'CONST' gefunden
[DCC Fehler] BigInt.pas(175): E2086 Typ 'TBigInt' ist nicht vollständig definiert
[DCC Fehler] BigInt.pas(175): E2086 Typ 'TBigInt' ist nicht vollständig definiert
[DCC Fehler] BigInt.pas(177): E2029 ; erwartet, aber Bezeichner 'Operator' gefunden
[DCC Fehler] BigInt.pas(177): E2029 Ausdruck erwartet, aber 'CONST' gefunden
[DCC Fehler] BigInt.pas(177): E2086 Typ 'TBigInt' ist nicht vollständig definiert
[DCC Fehler] BigInt.pas(177): E2029 '=' erwartet, aber ')' gefunden
[DCC Fehler] BigInt.pas(178): E2029 ; erwartet, aber Bezeichner 'Operator' gefunden
[DCC Fehler] BigInt.pas(178): E2029 Ausdruck erwartet, aber 'CONST' gefunden
[DCC Fehler] BigInt.pas(178): E2004 Bezeichner redefiniert: 'Oper1'
[DCC Fehler] BigInt.pas(178): E2004 Bezeichner redefiniert: 'Oper2'
[DCC Fehler] BigInt.pas(178): E2086 Typ 'TBigInt' ist nicht vollständig definiert
[DCC Fehler] BigInt.pas(179): E2029 ; erwartet, aber Bezeichner 'Private' gefunden
[DCC Fehler] BigInt.pas(1334): E2393 Ungültige Operatordeklaration
[DCC Fehler] BigInt.pas(1334): E2029 '=' erwartet, aber ')' gefunden
[DCC Fehler] BigInt.pas(1335): E2029 Ausdruck erwartet, aber 'BEGIN' gefunden
[DCC Fehler] BigInt.pas(1336): E2003 Undefinierter Bezeichner: 'Result'
[DCC Fehler] BigInt.pas(1337): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(1340): E2393 Ungültige Operatordeklaration
[DCC Fehler] BigInt.pas(1340): E2029 '=' erwartet, aber ';' gefunden
[DCC Fehler] BigInt.pas(1340): E2029 '=' erwartet, aber ')' gefunden
[DCC Fehler] BigInt.pas(1341): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(1342): E2003 Undefinierter Bezeichner: 'Result'
[DCC Fehler] BigInt.pas(1343): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(1346): E2393 Ungültige Operatordeklaration
[DCC Fehler] BigInt.pas(1346): E2029 '=' erwartet, aber ';' gefunden
[DCC Fehler] BigInt.pas(1346): E2029 '=' erwartet, aber ')' gefunden
[DCC Fehler] BigInt.pas(1347): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(1348): E2003 Undefinierter Bezeichner: 'Result'
[DCC Fehler] BigInt.pas(1349): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(2694): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
[DCC Fehler] BigInt.pas(2694): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
[DCC Fehler] Unit1.pas(7): F2063 Verwendete Unit 'BigInt.pas' kann nicht compiliert werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#46

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 22:04
da es mit Zeile 175 anfängt

ersetzt mal den Namen BitwiseNot durch LogicalNot
(Zeilen 175 und 1334)

stimmt zwar von der Logik her nicht ganz, aber von der Funktion her sollte es damit auch gehn.
(Delphi unterscheidet ja angeblich nicht zwischen binären und logischen Operatoren )

nja, und dann mal sehen welche der Folgefehler noch übrig bleiben
$2B or not $2B
  Mit Zitat antworten Zitat
tuxianer

Registriert seit: 16. Mai 2008
25 Beiträge
 
#47

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 22:07
geht leider noch nicht:
Delphi-Quellcode:
[DCC Fehler] BigInt.pas(177): E2393 Ungültige Operatordeklaration
[DCC Fehler] BigInt.pas(177): E2029 Bezeichner erwartet, aber 'CONST' gefunden
[DCC Fehler] BigInt.pas(177): E2086 Typ 'TBigInt' ist nicht vollständig definiert
[DCC Fehler] BigInt.pas(177): E2029 '=' erwartet, aber ')' gefunden
[DCC Fehler] BigInt.pas(178): E2029 ; erwartet, aber Bezeichner 'Operator' gefunden
[DCC Fehler] BigInt.pas(178): E2029 Ausdruck erwartet, aber 'CONST' gefunden
[DCC Fehler] BigInt.pas(178): E2004 Bezeichner redefiniert: 'Oper1'
[DCC Fehler] BigInt.pas(178): E2004 Bezeichner redefiniert: 'Oper2'
[DCC Fehler] BigInt.pas(178): E2086 Typ 'TBigInt' ist nicht vollständig definiert
[DCC Fehler] BigInt.pas(179): E2029 ; erwartet, aber Bezeichner 'Private' gefunden
[DCC Fehler] BigInt.pas(1340): E2393 Ungültige Operatordeklaration
[DCC Fehler] BigInt.pas(1340): E2029 '=' erwartet, aber ';' gefunden
[DCC Fehler] BigInt.pas(1340): E2029 '=' erwartet, aber ')' gefunden
[DCC Fehler] BigInt.pas(1341): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(1342): E2003 Undefinierter Bezeichner: 'Result'
[DCC Fehler] BigInt.pas(1343): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(1346): E2393 Ungültige Operatordeklaration
[DCC Fehler] BigInt.pas(1346): E2029 '=' erwartet, aber ';' gefunden
[DCC Fehler] BigInt.pas(1346): E2029 '=' erwartet, aber ')' gefunden
[DCC Fehler] BigInt.pas(1347): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(1348): E2003 Undefinierter Bezeichner: 'Result'
[DCC Fehler] BigInt.pas(1349): E2066 Operator oder Semikolon fehlt
[DCC Fehler] BigInt.pas(2694): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
[DCC Fehler] BigInt.pas(2694): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
[DCC Fehler] Unit1.pas(7): F2063 Verwendete Unit 'BigInt.pas' kann nicht compiliert werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#48

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 22:12
Zitat von tuxianer:
bringt leider auch nix:
doch schon ... der Fehler in Zeile 175 ist ja behoben ... nur gib es noch andere ... hab leider kein D2007 zum Testen.


Zitat von tuxianer:
[DCC Fehler] BigInt.pas(175): E2065 Ungenügende Forward- oder External-Deklaration: 'TBigInt.LogicalNot'
hast aber in Zeile 1334 das BitwiseNot noch nicht durch LogicalNot ersetzt
(Deklaraion und Funktion müssen ja umbenannt werden)


Zeile 177+178 = ShiftRight und ShiftLeft
ich dachte zwar die haben es schon mit dem Updat behoben,
aber vielleicht heißt das bei dir RightShift und LeftShift (umgekerte Reinfolge)
ShiftRight > RightShift
ShiftLeft > LeftShift
$2B or not $2B
  Mit Zitat antworten Zitat
tuxianer

Registriert seit: 16. Mai 2008
25 Beiträge
 
#49

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 22:20
ok es kommen jetztkeine fehler mehr nach all diesen Korrekturen!
  Mit Zitat antworten Zitat
tuxianer

Registriert seit: 16. Mai 2008
25 Beiträge
 
#50

Re: Exponentieren und dann Modulo: große Zahlen

  Alt 31. Mai 2008, 22:27
noch was:


Delphi-Quellcode:
Function tF_Haupt.mod_exp(Basis, Exponent, Modulo: TBigInt): TBigInt;
  Begin
    Result := 1;
    While Exponent > 0 do Begin
      If Exponent.Data and $1 <> 0 Then
        Result := (Result * Basis) mod Modulo;
      Basis := (Basis * Basis) mod Modulo;
      Exponent := Exponent div 2;
    End;
  End;
Delphi-Quellcode:
[DCC Fehler] Unit1.pas(176): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
[DCC Warnung] Unit1.pas(176): W1023 Vorzeichenbehaftete und -lose Typen werden verglichen - beide Operanden werden erweitert
Diese jedoch geht:

Delphi-Quellcode:
Function tF_Haupt.mod_exp(Basis, Exponent, Modulo: TBigInt): TBigInt;
  Begin
    Result := 1;
    If not Exponent.isNegative Then
      While not Exponent.isZero do Begin
        If Exponent.Data[0] and $1 <> 0 Then Begin
          Result.Multiply(Basis);
          Result.Modulus(Modulo);
        End;
        Basis.Multiply(Basis);
        Basis.Modulus(Modulo);
        Exponent.bShR(1);
      End;
  End;
meine mit Bigint geht auch:

Delphi-Quellcode:
function tF_Haupt.mod_exp(basis,exponent,modulo:TBigInt):TBigInt;
var e:TBigInt;
begin
  e:=1;
  while (exponent>0) do begin
    if (exponent mod 2 > 0) then e:=(e*basis) mod modulo;
    basis:=(basis*basis) mod modulo;
    exponent:=exponent div 2;
  end;
  result:=e;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz