AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Den MOD per Hand berechnen! -> falsches Ergebnis!!!!
Thema durchsuchen
Ansicht
Themen-Optionen

Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

Ein Thema von Kamikaze87 · begonnen am 8. Feb 2007 · letzter Beitrag vom 11. Feb 2007
Antwort Antwort
Kamikaze87

Registriert seit: 1. Feb 2007
13 Beiträge
 
#1

Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 8. Feb 2007, 14:36
Hi Leute


ich sehe mich wieder mal vor ein problem gestellt wo ich den fehler nicht finde!!!!

also ich habe drei zahlen die nach rsa entschlüsselt werden soll

299 soll mit 173 und 481 entschlüsslt werden!!!

Also 299^173 MOD 481 = entschlüsselt .

es gibt aber folgendes problem und zwar das 299^173 eine für longint zu hohe zahlen rauskommen deshalb habe ich den extended benutzt weil ich nur mit delphi3 programmiere und int64 da noch nicht vorhanden sind...


also lasse ich den mod per hand berchnen da er sonst nur für integer konzipiert ist:
achso und 299^173 ist schon mit einer weiteren prozedur berechnet und heisst bei mir 'k1'.
b:=481;
Delphi-Quellcode:
  a:=k1/b;
          a:=fract(a);
          a:=a*b;
          a:=round(a);
und für genau die zahlen wie oben schon angegeben kommt bei mir für a=0 raus was nicht stimmt es müsste nämlich 65 rauskommen......das funktioniert sogar wenn ich das mit dem windows taschenrechner berechne!!!!
könnt ihr mir helfen??????


ich hoffe die infos reichen
wenn nicht meldet euch!!!

DAnke schon mal im voraus für eure Hilfe!!!!

MFG
Kamikaze
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 8. Feb 2007, 17:24
Zitat von Kamikaze87:
es gibt aber folgendes problem und zwar das 299^173 eine für longint zu hohe zahlen rauskommen deshalb habe ich den extended benutzt
Fliesskommazahlen (double, Extended) kann du bei dieser Aufgabe grundsätzlich vergessen.
Du musst bei Integerarithmetik bleiben!
299^173 ist 299*299*299*...299 (173 Faktoren)
Das ist eine riesige Zahl!!
Es gibt nun sicherlich mathmatische Möglichkeiten a^b mod c auszurechnen ohne dass man
die Zahl a^b wirklich berechnet.
Tipp: die einzelnen Multiplikationen und Modulooperationen lassen sicher verschachteln. Dabei wird der Integerbereich nie verlassen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 8. Feb 2007, 17:33
Das hatten wir vor kurzem schon mal. Such einfach nach "Diskrete Exponentialfunktion". Da ist ein schöner, langer Beitrag von mir mit einem Beispiel.

EDIT: Ich hab heute gute Laune und geb dir deshalb gleich den Link: http://www.delphipraxis.net/internal...=675294#675294
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 8. Feb 2007, 17:52
Moin,

kurz gesagt: du brauchst keinen Extended oder aehnliches. Im Gegenteil: du musst nur die Integer-Zahlen abspeichern koennen, mit denen du arbeitest, und sonst nichts. Schliesslich ist
Code:
a^b % c
auch zu umschreiben als
Code:
((a^(b-1) % c) * (a % c)) % c
Wir haben also eine rekursive Gleichung, die du mit einigen Optimierungen auf die Variante aus Wikipedia zurueckfuehren kannst. Wenn du das also bis ans Ende fortfuehrst, wirst du kein einzges Mal eine Potenz berechnen muessen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 8. Feb 2007, 18:05
Zitat von 3_of_8:
Das hatten wir vor kurzem schon mal. Such einfach nach "Diskrete Exponentialfunktion". Da ist ein schöner, langer Beitrag von mir mit einem Beispiel.

EDIT: Ich hab heute gute Laune und geb dir deshalb gleich den Link: http://www.delphipraxis.net/internal...=675294#675294
Zitat von 3_of_8:
Code:
function discreteExponent(b, x, m: Integer): Integer;
begin
  result:=1;
  while x>0 do
  begin
    if x and 1=1 then Result:=Result*b mod m;
    b:=[b](b*B)[/b] mod m;
    X:=x div 2;
  end;
end;
Bei 299^173 MOD 481 geht das noch gut, wenn man allerdings (wie bei RSA so ueblich ist) mit grossen Zahlen rechnet, duerfteste mit der Funktion ziemlich dumm aussehn.
In einer sache hast du aber recht: sowas hatten wir letztlich schon: *klick*
D.h. eigentlich wie alci schon geschrieben hat:
Code:
(a ^ b) % c = ((a^(b-1) % c) * (a % c)) % c
vllt. stell ich heut noch ne nicht-rekursive Gleichung dafuer auf.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
XooL

Registriert seit: 10. Feb 2007
2 Beiträge
 
#6

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 10. Feb 2007, 10:32
hi,
ich hab das ganz ähnliche Problem...
ich habs auch mal mit der Gleichung ausprobiert allerdings: wie soll dazu der rekursive Rahmen aussehen ?

mfg
Delphi 6
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 10. Feb 2007, 10:47
Ich habs nu nicht ganz Geblickt,

aber ich Poste euch mal wie ich das mache.

Delphi-Quellcode:
Function XHochYModZ(x, y, z: integer): Integer;
Var
  i, e: INteger;
Begin
  e := 1;
  For i := 1 To y Do
    e := (e * x) Mod z;
  result := e;
End;
Ich hoffe das hilft.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
XooL

Registriert seit: 10. Feb 2007
2 Beiträge
 
#8

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 10. Feb 2007, 11:44
vielen Dank... manchmal hat man einfach n Brett vorm Kopf...
Delphi 6
  Mit Zitat antworten Zitat
Jerk

Registriert seit: 6. Feb 2007
7 Beiträge
 
#9

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 10. Feb 2007, 14:04
Evtl liegt es an dem Div 2 weil das doch noch mit graden zahlen funktioniert. Teste mal it x*0.5.

Edit hat sich ja schon gelöst...
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Den MOD per Hand berechnen! -> falsches Ergebnis!!!!

  Alt 11. Feb 2007, 09:20
Delphi-Quellcode:
Function XHochYModZ(x, y, z: integer): Integer;
Var
  i, e: INteger;
Begin
  e := 1;
  For i := 1 To y Do
    e := (e * x) Mod z;
  result := e;
End;
Das ist defakto inpraktikabel und ineffizient. Wir führen damit Y mal eine modulare Multiplikation aus. Und stelle dir vor Y wäre wie bei RSA üblich circa 2^1024 groß.

Der Vorschlag von 3_of_8 ist da schon weitaus besser. Dieser führt im Durchschnitt Ln2(Y) mal eine modulare Multiplikation und Ln(Y)/2 eine Quadrierung durch wenn man nicht wie sein Vorschlag die Rechts nach Links Methode sondern die Links nach Rechts Methode anwendet. Ich kenne das aber und einen anderen Namen -> "Left to Right/Right to left binary Exponentation" also einfach gesagt eine binäre Exponentation.

Ich hatte hier vor langer Zeit schonmal einen Source für Int64 reingestellt, http://www.delphipraxis.net/internal...+exponentation

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:30 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