Zeichenkette Programmintern speichern?

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Zeichenkette Programmintern speichern?

    Moin :)

    Ich würde gerne eine Trial Funktion in mein Programm einbauen.
    Gedacht ist es so:

    VB.NET-Quellcode

    1. Dim Day = Hex(My.Computer.Clock.LocalTime.Day.GetHashCode)
    2. Dim Month = Hex(My.Computer.Clock.LocalTime.Month.GetHashCode)
    3. Dim Year = Hex(My.Computer.Clock.LocalTime.Year.GetHashCode)
    4. Dim Hour = Hex(My.Computer.Clock.LocalTime.Hour.GetHashCode + 2)
    5. Dim Min = Hex(My.Computer.Clock.LocalTime.Hour.GetHashCode)
    6. Dim Sec = Hex(My.Computer.Clock.LocalTime.Second.GetHashCode)
    7. TextBox4.Text = Day & "AD" & Month & "PE" & Year & "CE" & Hour & "EZ" & Min


    Bsp. hier hol ich Halt die Local TIme, Über den Hashcode in Hexadezimal umgewandelt, + ein paar FüllBuchstaben, damit der Code nicht zu leicht zu entschlüsseln ist.

    Diesen String würd ich jetzt gerne "lokal" abspeichern, aber nicht unbedingt in einem extra file, (z.B. wie bei: "My.Computer.FileSystem.WriteAllBytes(Application.StartupPath & "\Tim.e", X, False)"), da man das ja einfach aufrufen könnte, zudem könnte man so dahinter kommen, wie das System funktioniert etc. pp.

    Gibts eine Möglichkeit den String beim ersten Programmstart anzulegen, und dann danach immer nur noch zu überprüfen? also bei wiederaufrufen des Programmes, nur noch den String zu überprüfen, ob die Zeit abgelaufen ist?
    Danke!

    Grüße,
    Kevin
    Moin,

    solche Trial-Funktionen sind nie sicher. Jeder, der ein bisschen Erfahrung mit .NET hat, würde dein Programm Dekompilieren, also den Quellcode ansehen.
    Danach würde er genau wissen, wie es funktioniert und könnte sich ein Programm schreiben, was alles wiederholt -> Also der Trial-Status würde nie ablaufen.

    Aber zu deiner Frage: Du kannst mit Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) den Pfad zum AppData-Ordner heraus finden und dann dort (natürlich in einem Unterordner) alles speichern. Damit wird es schon etwas schwerer.
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
    Du kannst die Information natürlich auch in der Registry ablegen.
    Schaust Du hier
    Man sollte auch immer abwägen, wie viel Zeit man in das Abschotten des Programmes investiert und wie leicht ein Programm nachzubauen ist, wenn man ein Beispiel hat, an dem man die Funktionalität sehen kann.

    Auf der anderen Seite warum alles dicht machen. Es gibt ja auch noch die Variante das ganze als OpenSource zu machen, Hat den Vorteil, dass andere auch Fehler finden und beheben können.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Viercnt schrieb:

    Über den Hashcode in Hexadezimal umgewandelt
    Hex ist lediglich eine von mehreren String-Repräsentationen eines Ganzzahlwertes:

    VB.NET-Quellcode

    1. Dim val = 123456789
    2. Dim txt = val.ToString("X") ' das X lässt den Wert zum Hex-String mit großen Buchstaben werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okay, Perfekt, ich speicher das nun in der Registry :)

    Folgendes Problem:
    Per

    VB.NET-Quellcode

    1. Private Function HashDate()
    2. Dim Day = Hex(My.Computer.Clock.LocalTime.Day.GetHashCode)
    3. Dim Month = Hex(My.Computer.Clock.LocalTime.Month.GetHashCode)
    4. Dim Year = Hex(My.Computer.Clock.LocalTime.Year.GetHashCode)
    5. Dim Hour = Hex(My.Computer.Clock.LocalTime.Hour.GetHashCode)
    6. Dim Min = Hex(My.Computer.Clock.LocalTime.Minute.GetHashCode)
    7. Dim HexDate As String = Year & Month & Day & Hour & Min
    8. Return HexDate
    9. End Function


    Lege ich nun das HexDate ab, für heute bsp. "7DEC91314"
    bsp. 7DE für 2014
    C für 12 etc. pp

    Kann ich jetzt irgendwie den das HexDate wieder von 7DEC91314 zu 201412091920 konvertieren?

    Wenn ich den kompletten Hex wieder decodiere kommt aus 7DEC91314 => "33802490644"


    Das mache ich über:

    VB.NET-Quellcode

    1. Dim lngDezimal As Long
    2. Dim strHex As String
    3. strHex = TextBox9.Text
    4. lngDezimal = CLng("&H" & strHex)
    5. TextBox5.Text = lngDezimal
    Danke!

    Grüße,
    Kevin

    Viercnt schrieb:

    VB.NET-Quellcode

    1. GetHashCode
    ist leider nicht bidirektional, das ist eine Sackgasse.

    MSDN schrieb:

    GetHashCode-Methode stellt diesen Hashcode für Algorithmen bereit, die die schnelle Überprüfungen der Objektgleichheit benötigen.
    Gugst Du hier.
    Du müsstest die Werte verschlüsseln.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Aber einzeln kann ich sie ja über meine Longdezimal Funktion am Ende von Hex in Dec umwandeln, ohne Probleme?

    Problem ist wohl nur, dass wenn ich sie als String speicher, also alle hintereinander, dass dann wohl ein anderer Decodierter Wert rauskommt, als wenn ich sie einzeln aus Hex wieder in Dec umrechne? :(
    Danke!

    Grüße,
    Kevin

    Viercnt schrieb:

    von Hex in Dec umwandeln

    VB.NET-Quellcode

    1. Dim val = 123456789
    2. Dim txt = val.ToString("X8") ' erzeugt einen 8-Zeichen langen Hex-String
    3. Dim val2 = Convert.ToInt32(txt, 16)
    4. If val <> val2 Then
    5. MessageBox.Show("FEHLER")
    6. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jap, klappt, auch.

    Nochmal langsam, ich würde gerne mein Datum im Format 201412091954, also JahrMonatTagStundeMinute, Hashen bzw. "etwas verschlüsseln" und in der Registry ablegen.
    Jedoch möchte ich den wert aus der Registry lesen und Entschlüsseln, dass er wieder so im Format JahrMonatTagStundeMinute vorhanden ist.

    Sinn der Sache ist, dass ich mich an einem Trial Programm versuchen mag :)
    Was wäre da denn der beste weg, erstmal das Datum zu verschlüsseln, und später wieder zu entschlüsseln?? :)
    Danke!

    Grüße,
    Kevin

    Viercnt schrieb:

    "etwas verschlüsseln"
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sagt mal, was ich grad so nachgeforscht habe.
    Was haltet ihr eig davon, wenn ich statt die ganze "pseudo verschlüsselung" hier selber zu machen, einfach eine AES Class nehme, und die verwende?

    also zum De und Encrypten?
    Wäre das im endeffekt nicht Sicherer UND einfacher? :)
    Danke!

    Grüße,
    Kevin
    nein, AES und Konsorten anzuwenden ist deutlich aufwändiger. Ich hab Hilfsklassen dafür geschrieben, und ist immer noch aufwändig, und muss man erstmal schnackeln, wie die ticken: Verschlüsseln und Autentifizieren

    Und wirklich verschlüsseln kannst du ja eh nicht, weil du den Schlüssel ja auch iwie im Tryal-Proggi mitgeben willst - ein Vorgehen, was man nur noch als "obfuskieren" bezeichnen darf - nicht als "Verschlüsseln".
    Und es lohnt auch nicht, denn man wird immer dein Proggi disassembeln können, und die Tryal-Abfrage umgehen - selbst wenn du wirklich verschlüsseln würdest.

    Aber immerhin gut, dass du ühaupt mal auf den Stand der Technik aufmerksam wirst :thumbup:

    Wie weit bist du im Vermeiden der bösen Funktionen? (das wäre noch besser)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Viercnt schrieb:

    ich speicher das nun in der Registry

    Mich wundert es, dass dies noch niemand angesprochen hat, aber das ist ganz ungut. Die Registry kann man schnell zerschießen, wenn man dort alles speichert, was nicht reingehört. Einstellungen, wie diese gehören dazu.

    Ändere das bitte auf eine vernünftige Speichermethode, denn somit kann man sich auch viel Ärger einhandeln.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Normal in Dateien speichern oder serialisieren, My.Settings von mir aus, wenn das geht, aber nicht die Registry.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: