Serial Key speichern?

internet

Top Contributor
Hallo zusammen,

ich habe folgendes vor:
Ich möchte eine Webapplikation samt Applikationsserver (Wildfly) und DB (h2 Database) ausliefern.

1) Beim ersten Aufruf auf die Webapp wird man erst nach dem Serial Key gefragt, den man zuvor per Email erhalten hat.
2) Der User gibt nun den Serial Key ein.
3) Es wird ein WebService angefragt (Internetverbindung vorrausgesetzt), der prüft, ob es den Serial Key schon gibt etc. Es kommt dann entweder true oder false zurück

Nun ist aber mein eigentliches Problem:
Wo speichere ich diese Information ab, also ob true oder false ?
In der Datenbank geht es schlecht, da der User aufgrund den Config-Files auch Username und Passwort hat, sodass er den Eintrag in der Datenbank selbst schreiben kann.
Denn genau diese Information (true oder false) wird beim Aufruf der Applikation geprüft:
Bei true -> normaler Aufruf und Nutzung der WebApp
Bei false -> Weiterleitung zur SerialKey - Eingabe

Hat jemand Ideen? Bin über jeden Tipp dankbar.
 

Tobse

Top Contributor
Zunächst: Du MUSST es irgendwo speichern. Wenn dein Programm an die Info kommt, dann auch der User => ergo kann der User es theoretisch auch verändern.

Nur True/False zu speichern macht deine Software super easy zu cracken.
Zum Thema Lizenzen erhalten und prüfen gibt es mehr Theorien wie Sand am Meer. Hier mein Favorit:

1. Sende den Lizenzschlüssel L an den Server. (Wenn ungültig natürlich abbrechen)
3. Der Server errechnet eine Signatur S des Schlüssels mit seinem privaten Schlüssel (S = SIG(L))
4. Der Server sendet L und S zurück
5. Du speicherst L und S in der Datenbank oder in einer Datei
Um nun zu prüfen, ob die Lizenz gültig ist, prüfst du die Signatur mit dem öffentlichen Schlüssel des Servers.

Sollte deine Anwendung immer Internetzugriff haben, kannst du auch eine ablaufzeit einbauen sodass der Schlüssel alle 2-3 Tage neu geprüft wird.
 

internet

Top Contributor
Danke für die Antwort.
Hast Du hierfür ggf. Codebeispiele:

3. Der Server errechnet eine Signatur S des Schlüssels mit seinem privaten Schlüssel (S = SIG(L))
4. Der Server sendet L und S zurück
5. Du speicherst L und S in der Datenbank oder in einer Datei
Um nun zu prüfen, ob die Lizenz gültig ist, prüfst du die Signatur mit dem öffentlichen Schlüssel des Servers.

Das ist mir nicht so ganz klar - wie errechne ich eine Signatur?
Was meinst Du genau mit S = SIG(L)
Wie genau sieht dann L oder S aus? Datentyp= String?

Die Applikation hat nicht immer Internetzugriff - bestmöglich wird Internetzugriff nur für den Key bzw. Freischaltung benötigt.
 

Tobse

Top Contributor
Public-Key Kryptographie im allgemeinen: https://de.wikipedia.org/wiki/Asymmetrisches_Kryptosystem
Konkret RSA: https://de.wikipedia.org/wiki/RSA-Kryptosystem
In Java siehe (sowohl zum Signieren als auch zum prüfen): http://docs.oracle.com/javase/7/docs/api/java/security/Signature.html

Deinen Lizenzschlüssel musst du hierfür in eine Zahl umwandeln (z.B. Base36 oder Base62); die ist dann aber zu groß für int oder long, da musst du java.math.BigInteger benutzen.
Die Signatur sind dann Binärdaten; die musst du dann sinnvollerweise in einen String oder eine Zahl umwandeln (hier wäre Base64 oder Base62 zu empfehlen).

Dass deine Applikation keinen Internetzugriff hat ist in Ordnung. Du solltest dann nur aufpassen, dass man nicht 3 Installationen mit dem selben Key aktivieren kann.
 

internet

Top Contributor
Danke.
Den privaten Key lege ich dann auf dem Server ab?

Aber so ganz verstehe ich noch nicht was dann die Signatur mir bringt? Wie prüfe ich dann, ob der Key gültig ist. Wird das dann nochmals in meiner Webapplikation geprüft?
Wenn die Signatur z.B. 1234 ist und diese als gültig gilt, dann könnte man doch einfach in der DB diese Signatur jedes Mal verwenden? Wie kann ich es denn dann verhinden, dass der Key bzw. die Signatur nicht zig mal verwendet wird? Wie gesagt, Internetzugang soll nur für die Aktivierung des Key gelten.
Klar - mit Internetzugang könnte ich dann alle paar Stunden z.B. nochmal prüfen, ob der Key gültig ist - aber ohne Internetzugang - wie mache ich das?
 

Tobse

Top Contributor
Ja, auf dem Server.

Das geht nicht. Punkt. Du kannst auf dem Server sicherstellen, dass eine Lizenz nicht zweimal aktiviert wird. Aber das mit der DB kannst du nicht verhindern. Die Verwendung der Kryptographie macht es aber deutlich schwieriger als mit einem einfachen boolean.
 

Thallius

Top Contributor
Du kannst den key und das was du schreibst verschlüsseln wie du willst. Solange du es in Java machet kann jeder Möchtegern Hacker dein Programm in 3 Minuten dekompilen und kurz die Abfrage des keys entfernen. Was du da vorhast ist alles vergebene Liebesmühe.

Gruß

Claus
 

Tobse

Top Contributor
Du kannst den key und das was du schreibst verschlüsseln wie du willst. Solange du es in Java machet kann jeder Möchtegern Hacker dein Programm in 3 Minuten dekompilen und kurz die Abfrage des keys entfernen. Was du da vorhast ist alles vergebene Liebesmühe.

Gruß

Claus
Es gib Obfuscator. Davon abgesehen: das geht mit jeder Software, das schaffen die cracker auch bei den kompliziertesten Kopierschutzmechanismen, welche sich Firmen wie Microsoft, Adobe oder EA erstellen.

@TE: Nur auf die Internetverbindung zu prüfen bringt dir nicht viel, du musst dann auch den Lizenzschlüssel prüfen. Siehe dazu: java.io.Socket und java.net.URLConnection
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Serial port abfragen Java Basics - Anfänger-Themen 18
B Serial Key prüfen -> String mit privatem Key und dann abgleichen; Summe = 0 Java Basics - Anfänger-Themen 8
B Serial Key - Prüfung ob Software gekauft Java Basics - Anfänger-Themen 1
E Programm - Serial etc? Java Basics - Anfänger-Themen 4
nrg Serial Version ID? Java Basics - Anfänger-Themen 16
ff eclipse ::--> serial version uid Java Basics - Anfänger-Themen 8
G @SuppressWarnings("serial") Java Basics - Anfänger-Themen 2
H Serial Java Basics - Anfänger-Themen 5
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
I Passwort in Datenbank speichern um später wieder auszulesen Java Basics - Anfänger-Themen 5
S mehrere TreeSets so speichern, dass man sie miteinander vergleichen kann Java Basics - Anfänger-Themen 1
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
berserkerdq2 Wie datum im default format speichern? Java Basics - Anfänger-Themen 5
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
B Screenshots machen und zwar viele und speichern Java Basics - Anfänger-Themen 12
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
Marlena Bauer Konsolenausgabe in .txt speichern Java Basics - Anfänger-Themen 6
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
C File speichern Java Basics - Anfänger-Themen 5
D String und char in String speichern Java Basics - Anfänger-Themen 5
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
GermanPie Nachrichten Speichern Java Basics - Anfänger-Themen 2
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
C Wo Defaultpfad speichern? Java Basics - Anfänger-Themen 2
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
Dimax stream in string[] speichern Java Basics - Anfänger-Themen 6
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H Objekt im Array speichern Java Basics - Anfänger-Themen 2
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
M JTextField in ArrayList speichern Java Basics - Anfänger-Themen 4
L Nur Bestimmte Werte aus einem Array in ein anderes Speichern Java Basics - Anfänger-Themen 11
S Zweidimensionales Array in ein eindimensionales Array speichern Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
C ResultSet in Array speichern Java Basics - Anfänger-Themen 5
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
J Kann man files in einer Klasse speichern. Java Basics - Anfänger-Themen 2
B Infos zu Attribute in einer Klasse speichern Java Basics - Anfänger-Themen 3
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
I Datei in Programm speichern Java Basics - Anfänger-Themen 3
A .txt-Datei mit Java speichern Java Basics - Anfänger-Themen 2
M Speichern unter. Java Basics - Anfänger-Themen 11
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
L Kommandozeileneinträge in Array speichern Java Basics - Anfänger-Themen 4
B HTML Code in XML speichern Java Basics - Anfänger-Themen 3
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
G JTextField per Button speichern und an andere Klasse übergeben Java Basics - Anfänger-Themen 2
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
B XML in DB speichern -> Regelkonzept Java Basics - Anfänger-Themen 2
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
void19 Methoden Binärbaum Inorder Traversierung in Array speichern Java Basics - Anfänger-Themen 1
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
K Geburtsdaten von Mehreren Personen speichern und Alter ausgeben Java Basics - Anfänger-Themen 11
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
Dimax Programme ,als Text in MySql speichern Java Basics - Anfänger-Themen 7
C Erste Schritte ArrayIndexOutOfBoundsException beim Speichern im Array Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben