ich mache momentan ein wenig auf dem Gebiet der Kryptographie und habe zusammen mit einem Freund mal den RSA Algorithmus implementiert. Das ganze ist relativ schlampig geschrieben und für eine richtige Verwendung muss natürlich noch einiges angepasst werden.
public class Bezout
{
int a = 0;
int b = 0;
public Bezout(int a, int b)
{
this.a = a;
this.b = b;
}
private int ggT(int a, int b)
{
if (a == 0) return b;
else if (b == 0) return a;
else
{
int remainder = 0;
do
{
remainder = a % b;
a = b;
b = remainder;
} while (remainder != 0);
}
return a;
}
public int getD()
{
if (a == 0) return 0;
else if (b == 0) return 1;
else
{
int s1 = 1, s2 = 0, s = 0;
int t1 = 0, t2 = 1, t = 1;
while (a % b != 0)
{
int q = a / b;
int r = a % b;
s = s1 - q * s2;
t = t1 - q * t2;
s1 = s2; s2 = s;
t1 = t2; t2 = t;
a = b;
b = r;
}
return s;
}
}
}
public class PublicKey
{
public int n;
public int e;
}
public class PrivateKey
{
public int n;
public int e;
public int p;
public int q;
public int d;
public int phi;
}
Moin, hab da noch ein paar kleine Anmerkungen ^^ Ich weiß nicht wie weit du in dem Thema bist, daher kann es sein das ich dir jez nur Sachen sage die du eh schon weißt.
1.
Warum hast du in deiner PrivateKey Klasse noch Phi, p, q. Diese werden doch nur während der Key Generation gebraucht.
2.
Ich würde dir empfehlen die Nachrichten beim Ent- und Verschlüsseln in Blöcke zu teilen, so werden die Nachrichten kleiner.
Du kannst ja Zahlen bis zu der Größe von n verschlüsseln, also kannste ja sowas machen:
Angenommen n = 110
Du willst z.B. 'ABCDE' verschlüsseln. Wir gehen dabei mal davon aus das A die Zahl 1 repräsentiert usw. und das wir nur Buchstaben im Alphabet verschlüsseln und ohne Groß- und Kleinschreibung.
Somit haben wir dieses Alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' und unsere höchste Zahl wäre die 26 ( 26 = Z )
In n passt die 26 mind. 4 mal rein. Somit können wir bis zu 4 Zeichen in einem verschlüsseln.
Also teilen wir 'ABCDE' in 'ABCD' und 'E' wandeln dies in eine Zahl um:
'01020304' und '05'
Diese Blöcke verschlüsselt man nun.
3.
Quote:
encrypt: m x eKey -> c
decrypt: c x dKey -> m
Das stimmt so nicht.
Encrypt: m ^ e % n = c
Decrypt: c ^ d % n = m
( '^' steht hier für das Potenzieren )
Im Programm selber machst du es aber wieder richtig indem, da du ModPow benutzt...
4.
Was soll Bezout heißen und warum hast du da ne Funktion drinnen zum ggT ermitteln und benutzt sie nit?
So, ich denke das wars, falls ich mich selber irgendwo vertan habe oder du noch Fragen hast werde ich diese gerne beantworten
1) korrekt, die werden nur zur Generierung gebraucht, ich wollte es nur in der Klasse haben, da das ganze ja das veranschaulichen sollte, was ich in der Theorie gelernt habe - private Eigenschaften und öffentlich bekannte Eigenschaften. Kann man in einer "richtigen" Implementierung eigentlich auch vernachlässigen, korrekt.
2) danke für den Tipp
3) Das ganze sollte eigentlich eher den Ablauf der Funktion an sich darstellen, encrypt wendet die Parameter m und eKey auf sich an und resultiert in c, bei decrypt dann c und dKey, das in m resultiert. Hatte noch überlegt, ob ich die eigentliche Funktion definiere, da wäre dann m ^ e % n = c natürlich richtig.
4) Das ganze ist das Lemma von Bézout (Lemma von Bézout ? Wikipedia), so erhalte ich den privaten Key für die Entschlüsselung. Die ggT Funktion wird eigentlich gar nicht benötigt, ich hatte davor eine andere Klasse geschrieben, daraus ist dann die Bézout Klasse entstanden. Einfach ignorieren.
Das Buch, das ich verwende, ist übrigens dieses hier:
3. Ist halt nur nicht klar ersichtlich das du das meinst und ich denke jemand der keine Ahnung davon hat erkennt das noch weniger.
4. Aso, hatte nicht dran gedacht das das damit zusammen hängen könnte xD Hab selber bisher zum Modularen Inverse bestimmen immer den Erweiterten Euklidischen Algorithmus genutzt, hatte mich dahingehend nicht mit anderen Algorithmen beschäftigt ^^
CenWR - C++ HotKey Base + HWID System Implementierung 01/17/2015 - WarRock Hacks, Bots, Cheats & Exploits - 11 Replies CenWR - C++ HotKey Base
Ich hatte heute vor, eine kleine HotKey Base zu schreiben.
Sie ist leicht erweiterbar.
Es müssen nur die Adressen angepasst werden.
Für jemanden, der C++ halbwegs beherrscht, sollte es kein Problem geben.
Außerdem wird das HWID System von Elitepvpers verwendet.
(Mehr hier).
Download
[D2NT 3.0] Goldbarb/Find Item Implementierung Testversion 03/05/2011 - Diablo 2 Programming - 22 Replies Anmerkung: Ich werde hier keine Aktualisierungen mehr einfügen, da mir der Aufwand einzelne Scripts zu isolieren zu hoch ist. Die hier hochgeladene Version ist nicht mehr aktuell, eine aktuelle Version findet sich in meinem Komplettpaket.
Hallo zusammen,
nach meinem Patzer beim Itemlog bin ich euch was schuldig glaube ich. :(
Darum gibts hier nun meine Find Item Implementierung.
Ist in meinen Augen definitiv noch nicht perfekt, auch wenn sie sogesehen ziemlich rund läuft und...
Metin2Bay Ideen für Pserver implementierung 10/15/2009 - Metin2 PServer Guides & Strategies - 12 Replies Hallo,
Da eig. fast alle NPCs Quests sind dachte ich mir man könnte doch einfach mal die Idee aufschnappen die sie bei Metin2.de hatten und sie als Quest umsetzen.
Da die Quests auch Datenbank Operationen durchführen ist es möglich allerdings könnte die Umsetzung ein Problem werden da ich es machen könnte aber keine Ahnung habe wie das Später aussehn soll.
Umsetzung wie ich es machen würde(Simple umsetzung):
Meine Vorstellung war jetzt das man auf den Marktplatz geht einen NPC anklickt...
[Suche] Script mit OCR-Implementierung 08/29/2007 - General Coding - 8 Replies guten Tag Coder-Community,
ich suche nun seit geraumer Zeit eine Möglichkeit eine Bilddatei im Format 20x15px per OCR auszulesen und auszuwerten. Hierbei handelt es sich lediglich um eine Bilddatei ohne weitere Störungen mit einer einheitlichen Hintergrundfarbe und einer bestimmten Zahl von 5-80.
Nun bräuchte ich jedoch eine Möglichkeit, am besten in PHP diese Bilddatei einzulesen und die Zahl dahinter rauszubekommen.
Gibt es ein Web-Script, der dies erledigt? Wenn es wirklich von nöten...