Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Name=raw_input('Name:')
Serial1=[ord(x) * 666 for x in Name]
Serial2=Serial1[0]+(len(Name)*14568)
Serial3=(Serial1[0]/666.0)*14568
Serial4=Serial3*123
Serial5=len(Name)*(Serial1[0]/666.0)
Serial6=Serial5*6613
Serial7=Serial6+14568
print 'Serial:', Serial2, '-', int(Serial4), '-', int(Serial7)
Schau Dir mal an, oder überleg Dir mal wie `Serial1` aussieht und was Du davon wirklich brauchst.
Auch fragt ihr euch warum ich Serial3 und 5 in float umwandle und dann wieder in int. Naja ich musste wieder auf den ersten Buchstaben von Name zugreifen und da der erste Wert in Serial1[0] mit 666 multipliziert wurde hab ich einfach durch 666.0 dividiert um
a)ein genaues ergebniss zu erhalten
Das ist Blödsinn. "10.0 / 2.0" ist nicht genauer als "10 / 2". Das gilt für alle ganzen Zahlen. Fliesskommazahlen können unter Umständen sogar ungenauere Ergebnisse liefern als Rechnungen mit ganzen Zahlen.
Python Master 47 hat geschrieben:Das ist kein Blödsin, weil:
wenn a:b=x, x€N
dann brauch ich keine division mit float, aber
wenn a:b=x, x€ !=N
dann ist int, ungenauer, z.B. ist 500/33 ist ungenauer als 500/33.0
Da Du mit einer ganzen Zahl multiplizierst und nur durch die selbe ganze Zahl teilst, gilt immer Fall 1. Du hast also keinen Genauigkeitsgewinn durch Fliesskommazahlen.
Hast Du Dir das selbst ausgedacht für ein Programm von Dir?
Wenn ja, dann würde ich erst mal anfangen mit kryptographisch sicheren Algorithmen umzugehen (wie zum Beispiel ein MD5- oder SHA-Digest). Da Du im Prinzip nur einen kleinen Teil der Eingabe für das Serial verbrauchst ist die Anzahl bits tatsächliche Daten pro Ausgabezeichen verschwindend gering, und somit auch Kollisionen mehr als einfach herstellbar.
Wenn sich das jemand anders ausgedacht hat gehört der wegen inkompetenten Programmierens an den Pranger gestellt.
Es geht mir um den Algorithmus zum Erstellen des Keys an sich. Du benutzt im Endeffekt zum Erstellen des Schlüssels nur das erste Zeichen des Namens und die Länge des Namens. Der ganze Rest fällt unter den Tisch.
Das bedeutet, dass folgende zwei Personen den selben Schlüssel kriegen:
Heiko Wundram
Helmut Anders
usw.
Du kannst das beliebig weiterspinnen.
Man nennt das was Du tust eine sogenannte Einweg-Funktion, weil es einfach ist aus einem Namen einen Schlüssel zu erzeugen, aber umgekehrt nicht oder nur unter sehr schwierigen Umständen möglich ist. Nur hat diese Einwegfunktion den Nachteil, dass sie sehr schnell Duplikate liefert, weil eben wie oben angemerkt zwei Personen mit Namen gleicher Länge und gleichem Anfangsbuchstaben den selben Key kriegen. Das nennt man dann eine Kollision, und Diese Einweg-Funktion ist eben alles andere als Kollisions-Resistent (das Gegenteil davon).
Darum: wer sich diesen Algorithmus ausgedacht hat sollte mal überlegen was es mit Einweg-Funktionen auf sich hat, und vor allem warum sie eben eine größere Entropie in der Ausgabe haben (_müssen_ um sicher zu sein) als dieser Algorithmus, da der obige sehr, sehr einfach zu fälschen ist.
Naja aber dann hab ich ja bei dem Programmieren des Keygens nichts falsch gemacht, da ich mich ja an die Anleitung gehlaten habe, oder hab ich doch was falsch gemacht?
Naja ich verstehe was du meinst, aber er hat das Programm ja gecrackt und die Serialberechnung des Programms herausgefunden, d.h. das er auch keinen Fehler gemacht hat, da das Programm halt diese Serialberechnung benutzt.Verstehst du?
Er hat sich pratisch nicht irgendeine Serrialberechnung ausgedacht, sondern die Serialberechnung eines Programms herausgefunden.Dieses Programm benutzt genau diese Serialberechnung!
Ich hab doch in meiner letzten Antwort schon gesagt dass Du nix falsch gemacht hast. Dieser Algorithmus zum erstellen einer Seriennummer ist nur absolut "braindead", und der Programmierer der sich sowas ausgedacht hat gehört standrechtlich erschossen für blödsinnige Intellectual-Property-Verwaltung. Also dafür dass er überhaupt so etwas implementiert hat, und des dann alles andere als richtig gemacht hat.