Trail nach [x] Tagen selbst löschen

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von TVX.

    Trail nach [x] Tagen selbst löschen

    Hallo Freunde,

    ich sitze jetzt nun schon seit Stunden an meinem Programm, fast ist es fertig - mein Gehirn ist am brennen, nichts geht mehr.
    Jetzt fehlt nur noch das letzte kleine Feature.
    Und zwar benötige ich eine Art "Trail-Funktion", was soviel bedeutet, dass das Programm nach x Tagen (in meinem Falle 60) eine Funktion ausführt (hier sich löscht).
    Mein Problem liegt allerdings darin, dass (mein Hirn soeben durchbrennt) ich das ganze über den Tag im Jahr steuere. Somit entstehen Problematiken mit der Differenz (Bsp.: Trail beginnt an Tag 320 (somit endet die Trail-Version am tage 380, welchen es garnicht gibt)).

    Bitte helft mir! Z.z. sieht es bei mir so aus:

    VB.NET-Quellcode

    1. Sub set_impact_to_zero()
    2. 'Impact (Selbstzerstörung) wird verschoben
    3. Dim im As Integer = My.Computer.Clock.LocalTime.DayOfYear + 60
    4. If im > 365 Then
    5. im = im - 365
    6. End If
    7. My.Settings.impact = im
    8. My.Settings.started = True
    9. My.Settings.Save()
    10. My.Settings.Reload()
    11. End Sub
    12. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    13. If My.Settings.started = False Then
    14. set_impact_to_zero()
    15. Else
    16. 'Hier checken, ob 60 Tage vergangen sind
    17. End If
    18. End Sub
    Einfach die gut durchdachten Klassen des Frameworks benutzen:

    VB.NET-Quellcode

    1. Option Strict On
    2. Dim dateStart As Date = ... 'der startzeitpunkt
    3. Dim dauer As TimeSpan = TimeSpan.FromDays(30)'die gültigkeitsdauer
    4. Dim dateEnde As Date = dateStart + dauer
    5. If Now >= dateEnde Then
    6. MsgBox("abgelaufen!")
    7. End If
    Wenn der Benutzer das Programm zum ersten mal ausführt, speicherst du einfach das Datum, an dem das "Trail" ablaufen soll.

    VB.NET-Quellcode

    1. If FirstRun Then
    2. My.Settings.Expired = Now + TimeSpan.FromDays(60)
    3. End If


    Bei Jedem Aufruf deines Programmes bzw. in Zeile 30, fragst du ab, ob es abgelaufen ist.

    VB.NET-Quellcode

    1. if Now >= My.Settings.Expired Then
    2. 'abgelaufen
    3. End If

    /nicht getestet

    Wichtig:
    Der Code ist extrem ranzig und einfach zu manipulieren.
    /nicht getestet
    @pittgi: Was, wenn der Rechner an diesem Tag nicht an ist oder das Programm nicht gestartet wurde?
    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!
    Ich dachte irgendwie in der Richtung !

    EDIT:

    Ist immer noch ein Reiner Testaufbau aber geht :!:

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Public Class Form1
    4. Dim Datum_Erststart As Date = Date.Now.Date
    5. Dim Datei As String
    6. Dim Pfad As String = "C:\Users\zeus\Desktop\Neuer Ordner (8)\Data_z.cfg"
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. Label1.Text = CStr("Aktuelles Datum: " & Datum_Erststart)
    9. 'Ermitteln ob Datei vorhanden ist,wenn ja auslesen und vergleichen mit heutigem Datum!
    10. If My.Computer.FileSystem.FileExists(Pfad) Then
    11. Datei = File.ReadAllText(Pfad)
    12. Label2.Text = CStr("Ablaufdatum: " & Datei)
    13. If Datum_Erststart > CDate(Datei) Then
    14. MsgBox("Ihre Testphase ist abgelaufen")
    15. End
    16. Else
    17. End If
    18. Else
    19. Dim Msg, Number, StartDate As String
    20. Dim Days As Double
    21. Dim SecondDate As Date = Datum_Erststart
    22. Dim IntervalType As DateInterval
    23. IntervalType = DateInterval.DayOfYear 'Monat-Tag-usw- als Interval einstellbar !
    24. StartDate = CStr(Datum_Erststart) 'Zeit bei Start
    25. SecondDate = CDate(StartDate)
    26. Number = "20" 'Zeit in Tagen die hinzugerechnet wird (( DayOfYear ))
    27. Days = Val(Number)
    28. Msg = CStr(DateAdd(IntervalType, Days, SecondDate)) 'Neues erstelltes Datum (+20Tage)
    29. 'Datei erstellen und datum reinschreiben mit +20 Tage
    30. Dim txt As String = Msg
    31. Dim fss As StreamWriter = File.CreateText(Pfad) 'Später ins Gemüse wos keiner findet !
    32. fss.Write(txt)
    33. fss.Close()
    34. 'Ermitteln ob Datei vorhanden ist,wenn ja auslesen und vergleichen mit heutigem Datum!
    35. Datei = File.ReadAllText(Pfad)
    36. If Datum_Erststart > CDate(Datei) Then
    37. End
    38. End If
    39. End If
    40. 'Restzeit bis Ablauf !
    41. Dim Differenz_Zeit As Long = DateDiff("d", Datum_Erststart, Datei)
    42. Label3.Text = CStr("Restzeit: " & Differenz_Zeit)
    43. End Sub
    44. 'Label1 und Label2 sind nicht nötig !
    45. End Class




    LG Andre.................. :rolleyes:

    Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von „TVX“ ()

    @TVX
    garnicht schön... xD
    Nuir um ein paar Negativbeispiele zu nennen:

    Zeile 12: Vergleichst du etwas String und Datum?! Option Strict On! Da kann nur murks bei rumkommen xD
    Zeile 25: Warum der Weg über einen String? Warum nicht gleich ein Integer?
    Zeile 18: Warum lokale Variablen oben deklarieren? Das ist total unübersichtlich. Deklariere doch erst dann wenn nötig und weise dann in einem Schritt den Wert zu
    Zeile 19: Days ist vom Denken her ganzzahlig - Integer wäre angebracht
    Zeile 10: Besser System.IO.FileInfo-Klasse benutzen als mit dem My-Namespace-Methoden zu hantieren. System.IO kann schon alles^^

    Könnte denke ich noch mehr nennen^^ Soll keinesfalls böse gemeint sein!

    Aber nochmal: Option Strict On!
    Ja ist klar hast recht , bin ja noch am basteln und werde Post 8 noch Edieren !

    Hab mir aber Gedanken drum gemacht !

    Hatte schon Angst das RodFromGermany mich wieder bürstet - aber was nicht ist das kann noch werden ^^

    LG Andre.........

    PS: Option Strict On ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()

    Bastelmappe :

    Testphase mit Verschlüsselung Test 5.rar
    www38.zippyshare.com/v/74968631/file.html

    Crypter für Testphase Beispiel !.exe
    www20.zippyshare.com/v/87277823/file.html

    EDIT: MIT VERSCHLÜSSELUNGS TEST !

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Security.Cryptography
    4. Public Class Form1
    5. Dim Datum_Erststart As Date = Date.Now.Date
    6. Dim Datei As String
    7. Dim Verschlüsselt As String
    8. Dim Entschlüsseln As String
    9. Dim Passverschlüsselung As String
    10. 'ANPASSUNGEN HIER !
    11. Dim Ablaufzeit As Integer = "20" 'Testzeit jetzt In Tagen ! - Monate und Jahre möglich !
    12. Dim Verschlüsselungspasswort_Zeit As String = "Mein Privates Passwort" 'Frei änderbar !
    13. Dim Verschlüsselungspasswort_Passwort As String = "Mein Privates Passwort" 'Muss generiert werden - gehört zu Serial_Key !
    14. Dim Serial_Key As String = "EUWQ/QIsjeC61WYRgoRs9aZdlVm4y5xwnC+8FzC5BVs=" ' Serial Key für nach der Testphase festlegen! = CF49-E3ZU-YK1P-LVQ5
    15. Dim Dateipfad As String = "C:\Windows\System32\Data_z.cfg" 'Pfad + Speicherdatei (( Data_z.cfg )) die versteckt wird !
    16. 'ANPASSUNGEN ENDE !
    17. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    18. Anfang:
    19. If My.Settings.Serial_Key = Serial_Key Then 'Wenn Key da ,dann sofort freischalten / wenn nicht weiter im Ablauf !
    20. Label1.Text = "Aktuelles Datum: " & Datum_Erststart
    21. Label2.Text = "Ablaufdatum: Keins !"
    22. Label3.Text = "Vollversion !"
    23. Label4.Text = "Key: " & My.Settings.Serial_Key
    24. GoTo Direckt_mit_Key_freischalten
    25. End If
    26. Label1.Text = "Aktuelles Datum: " & Datum_Erststart
    27. 'Ermitteln ob Datei vorhanden ist ! - Wenn ja auslesen und zur Überprüfung springen ! - Wenn nicht existiert mit GoTo Weiter angegebene Zeit zurechnen und Datei ertellen !
    28. If My.Computer.FileSystem.FileExists(Dateipfad) Then
    29. Entschlüsseln = File.ReadAllText(Dateipfad)
    30. '########################################################################################################################-Entschlüsseln 1/1 Anfang (( Zeit ))
    31. Dim oAesProvider1 As New AesManaged
    32. Dim btCipher1() As Byte
    33. Dim Entschlüsseln_1() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    34. Dim oKeyGenerator1 As New Rfc2898DeriveBytes(Verschlüsselungspasswort_Zeit, Entschlüsseln_1)
    35. oAesProvider1.Key = oKeyGenerator1.GetBytes(oAesProvider1.Key.Length)
    36. oAesProvider1.IV = oKeyGenerator1.GetBytes(oAesProvider1.IV.Length)
    37. Dim ms1 As New IO.MemoryStream
    38. Dim cs1 As New CryptoStream(ms1, oAesProvider1.CreateDecryptor(), CryptoStreamMode.Write)
    39. Try
    40. btCipher1 = Convert.FromBase64String(Entschlüsseln) 'Verschlüsselt rein
    41. cs1.Write(btCipher1, 0, btCipher1.Length)
    42. cs1.Close()
    43. Datei = System.Text.Encoding.UTF8.GetString(ms1.ToArray) 'Entschlüsselt raus
    44. Catch
    45. MsgBox("Eine Startinformation konnte nicht gelesen werden !" & vbCrLf & vbCrLf & "Das Programm wird nun geschlossen !", MsgBoxStyle.Exclamation, "Fehler!")
    46. End
    47. End Try
    48. '########################################################################################################################-Entschlüsseln 1/1 Ende (( Zeit ))
    49. Label2.Text = "Ablaufdatum: " & Datei
    50. GoTo Prüfe_Datum
    51. Else
    52. GoTo Weiter_zum_erstellen
    53. End If
    54. Prüfe_Datum:
    55. If Datum_Erststart > CDate(Datei) Then
    56. GoTo Prüfe_Serial_Key
    57. Else
    58. GoTo Freischalten
    59. End If
    60. Prüfe_Serial_Key:
    61. If My.Settings.Serial_Key = Serial_Key Then
    62. GoTo Freischalten
    63. Else
    64. GoTo Key_Eingabe
    65. End If
    66. Key_Eingabe:
    67. Passverschlüsselung = InputBox("Ihre Testphase ist abgelaufen !" & vbCrLf & vbCrLf & "Bitte Key eingeben !", "Die " & Ablaufzeit & " Tage der Testphase ist zu Ende !")
    68. '########################################################################################################################-Passwortverschlüsselung 1/3 Anfang
    69. Dim oAesProvider3 As New AesManaged
    70. Dim btClear3() As Byte
    71. Dim btSalt3() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    72. Dim oKeyGenerator3 As New Rfc2898DeriveBytes(Verschlüsselungspasswort_Passwort, btSalt3)
    73. oAesProvider3.Key = oKeyGenerator3.GetBytes(oAesProvider3.Key.Length)
    74. oAesProvider3.IV = oKeyGenerator3.GetBytes(oAesProvider3.IV.Length)
    75. Dim ms3 As New IO.MemoryStream
    76. Dim cs3 As New CryptoStream(ms3, _
    77. oAesProvider3.CreateEncryptor(), _
    78. CryptoStreamMode.Write)
    79. btClear3 = System.Text.Encoding.UTF8.GetBytes(Passverschlüsselung) 'Eingang unverschlüsselt !
    80. cs3.Write(btClear3, 0, btClear3.Length)
    81. cs3.Close()
    82. My.Settings.Serial_Key = Convert.ToBase64String(ms3.ToArray) ' Ausgang Verschlüsselt
    83. My.Settings.Save()
    84. '########################################################################################################################-Passwortverschlüsselung 1/3 Ende
    85. If My.Settings.Serial_Key = "" Then
    86. End
    87. Else
    88. GoTo Key_Eingabe_überprüfen
    89. End If
    90. Key_Eingabe_überprüfen:
    91. If My.Settings.Serial_Key = Serial_Key Then
    92. Label2.Text = "Ablaufdatum: Keins !"
    93. GoTo Freischalten
    94. Else
    95. GoTo Falsche_Key_Eingabe
    96. End If
    97. Falsche_Key_Eingabe:
    98. If MsgBox("Falscher Key !" & vbCrLf & vbCrLf & "Möchten Sie den Key erneut eingeben ?", CType(vbApplicationModal + vbYesNo, MsgBoxStyle), "Falscher Serial_Key !") = vbNo Then
    99. End
    100. Else
    101. GoTo Anfang
    102. End If
    103. Weiter_zum_erstellen:
    104. Dim Msg, Number, StartDate As String
    105. Dim Days As Double
    106. Dim SecondDate As Date = Datum_Erststart
    107. Dim IntervalType As DateInterval
    108. IntervalType = DateInterval.DayOfYear 'Monat-Tag-usw- als Interval einstellbar !
    109. StartDate = CStr(Datum_Erststart) 'Zeit bei Start
    110. SecondDate = CDate(StartDate)
    111. Number = CStr(Ablaufzeit) 'Zeit in Tagen die hinzugerechnet wird (( Momentan in Tagen DayOfYear - sihe Interval ))
    112. Days = Val(Number)
    113. Msg = CStr(DateAdd(IntervalType, Days, SecondDate)) 'Neues erstelltes Datum (+20Tage)
    114. '########################################################################################################################-Vershlüsseln Anfang (( Zeit ))
    115. Dim oAesProvider As New AesManaged
    116. Dim btClear() As Byte
    117. Dim btSalt() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    118. Dim oKeyGenerator As New Rfc2898DeriveBytes(Verschlüsselungspasswort_Zeit, btSalt)
    119. oAesProvider.Key = oKeyGenerator.GetBytes(oAesProvider.Key.Length)
    120. oAesProvider.IV = oKeyGenerator.GetBytes(oAesProvider.IV.Length)
    121. Dim ms As New IO.MemoryStream
    122. Dim cs As New CryptoStream(ms, oAesProvider.CreateEncryptor(), CryptoStreamMode.Write)
    123. btClear = System.Text.Encoding.UTF8.GetBytes(Msg) 'Eingang unverschlüsselt !
    124. cs.Write(btClear, 0, btClear.Length)
    125. cs.Close()
    126. Verschlüsselt = Convert.ToBase64String(ms.ToArray) ' Ausgang Verschlüsselt
    127. '########################################################################################################################-Vershlüsseln Ende (( Zeit ))
    128. Try
    129. IO.File.WriteAllText(Dateipfad, Verschlüsselt) 'Datei erstellen und datum reinschreiben mit +20 Tage
    130. Catch ex As Exception
    131. MsgBox("Ausnahmefehler das Programm wird geschlossen !", MsgBoxStyle.Critical, "Ausnahmefehler !")
    132. End
    133. End Try
    134. Entschlüsseln = File.ReadAllText(Dateipfad) 'Datei vorhanden ist,wenn ja auslesen
    135. '########################################################################################################################-Entschlüsseln 2/2 Anfang (( Zeit ))
    136. Dim oAesProvider2 As New AesManaged
    137. Dim btCipher2() As Byte
    138. Dim Entschlüsseln_2() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    139. Dim oKeyGenerator2 As New Rfc2898DeriveBytes(Verschlüsselungspasswort_Zeit, Entschlüsseln_2)
    140. oAesProvider2.Key = oKeyGenerator2.GetBytes(oAesProvider2.Key.Length)
    141. oAesProvider2.IV = oKeyGenerator2.GetBytes(oAesProvider2.IV.Length)
    142. Dim ms2 As New IO.MemoryStream
    143. Dim cs2 As New CryptoStream(ms2, oAesProvider2.CreateDecryptor(), CryptoStreamMode.Write)
    144. Try
    145. btCipher2 = Convert.FromBase64String(Entschlüsseln) 'Verschlüsselt rein
    146. cs2.Write(btCipher2, 0, btCipher2.Length)
    147. cs2.Close()
    148. Datei = System.Text.Encoding.UTF8.GetString(ms2.ToArray) 'Entschlüsselt raus
    149. Catch
    150. MsgBox("Eine Startinformation konnte nicht gelesen werden !" & vbCrLf & vbCrLf & "Das Programm wird nun geschlossen !", MsgBoxStyle.Exclamation, "Fehler!")
    151. End
    152. End Try
    153. '########################################################################################################################-Entschlüsseln 2/2 Ende (( Zeit ))
    154. Label2.Text = "Ablaufdatum: " & Datei
    155. If Datum_Erststart > CDate(Datei) Then 'Datei vergleichen mit heutigem Datum!
    156. GoTo Prüfe_Serial_Key
    157. Else
    158. GoTo Freischalten
    159. End If
    160. Freischalten:
    161. If Datum_Erststart > CDate(Datei) Then
    162. Label3.Text = "Vollversion !"
    163. Label4.Text = "Key: " & My.Settings.Serial_Key
    164. Else
    165. Dim Differenz_Zeit As Long = DateDiff("d", Datum_Erststart, Datei) 'Restzeit bis Ablauf anzeigen - wenn keine Restzeit = Vollversion !
    166. Label3.Text = "Restzeit: " & Differenz_Zeit
    167. End If
    168. Direckt_mit_Key_freischalten:
    169. End Sub
    170. 'Manuelle Keyeingabe Anfang !
    171. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    172. Manueller_Anfang:
    173. Passverschlüsselung = InputBox("Bitte geben Sie nun ihren Key ein !", "Serial_Key ?")
    174. '########################################################################################################################-Passwortverschlüsselung 2/4 Anfang
    175. Dim oAesProvider4 As New AesManaged
    176. Dim btClear4() As Byte
    177. Dim btSalt4() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    178. Dim oKeyGenerator4 As New Rfc2898DeriveBytes(Verschlüsselungspasswort_Passwort, btSalt4)
    179. oAesProvider4.Key = oKeyGenerator4.GetBytes(oAesProvider4.Key.Length)
    180. oAesProvider4.IV = oKeyGenerator4.GetBytes(oAesProvider4.IV.Length)
    181. Dim ms4 As New IO.MemoryStream
    182. Dim cs4 As New CryptoStream(ms4, oAesProvider4.CreateEncryptor(), CryptoStreamMode.Write)
    183. btClear4 = System.Text.Encoding.UTF8.GetBytes(Passverschlüsselung) 'Eingang unverschlüsselt !
    184. cs4.Write(btClear4, 0, btClear4.Length)
    185. cs4.Close()
    186. My.Settings.Serial_Key = Convert.ToBase64String(ms4.ToArray) ' Ausgang Verschlüsselt
    187. My.Settings.Save()
    188. '########################################################################################################################-Passwortverschlüsselung 2/4 Ende
    189. If My.Settings.Serial_Key = "" Then
    190. End
    191. Else
    192. GoTo Manuelle_Keyeingabe_überprüfen
    193. End If
    194. Manuelle_Keyeingabe_überprüfen:
    195. If My.Settings.Serial_Key = Serial_Key Then
    196. Label2.Text = "Ablaufdatum: Keins !"
    197. Label3.Text = "Vollversion !"
    198. Label4.Text = "Key: " & My.Settings.Serial_Key
    199. ' MsgBox("Das Programm wurde erfolgreich freigeschaltet", MsgBoxStyle.Information, "Serial_Key ok !")
    200. Me.Refresh()
    201. Else
    202. If MsgBox("Falscher Key !" & vbCrLf & vbCrLf & "Möchten Sie den Key erneut eingeben ?", CType(vbApplicationModal + vbYesNo, MsgBoxStyle), "Falscher Serial_Key !") = vbNo Then
    203. End
    204. Else
    205. GoTo Manueller_Anfang
    206. End If
    207. End If
    208. End Sub
    209. 'Manuelle Keyeingabe Ende !







    LG Andre..........

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „TVX“ ()

    Oh je @TVX xD
    Die ganzen GoTo's sind das schlimmste... Und den Serial im Code einzuarbeiten ist so als hättest du keinen... Außerdem scheinst du garnicht zu wissen was sich überhaupt hinter den Datentypen verbirgt. Immerhin castest du einen String zu einem String bevor du ihm einem Label zuweist (Zeile 188 etc).

    btw: [Sammelthread] Code-Korrektur
    (aber bitte nicht dort posten, deinen jetzigen Code wird dort niemand überarbeiten...er ist einfach zu lang)

    Hast dir trotzdem mühe gegeben. Wenn du dir die Grundlagen nochmal ganz genau ansiehst wirst du schon in einem Monat über deinen Code lachen xD
    lg
    Kann sein wollte halt mal wissen ob das so geht , die gotos sind nicht die schönsten aber verschafften mir beim testen nen guten überblick ^^

    Und wenn ich so weit zufrieden bin verbessere und ändere ich bis es schöner ist ;)

    Auserdem ist der innere Key verschlüsselt und wird durchs Programm verglichen !

    So weit funktioniert es jetzt Reibungslos . :)

    LG Andre.....................

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()

    TVX schrieb:

    die gotos sind nicht die schönsten aber verschafften mir beim testen nen guten überblick
    ist doch die total falsche Herangehensweise.
    Du versuchst permanent, die Aufgaben der anderen zu lösen, allerdings mit suboptimalen Mitteln. So wird das nix.
    Gewöhne Dir erst mal einen ordentlichen Stil an.
    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!
    Ich habe noch nicht aufgegeben ,jetz sollte es etwas besser sein :whistling:

    Benötigt wird nur ein Button / Für test noch Button2
    Und Label1,text



    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Security.Cryptography
    4. Public Class Form1
    5. 'Deklarationen MD5 Hash
    6. Dim InputBox_Passworteingabe_MD5 As String
    7. 'Deklaration Zeitdatei Verschlüsselung
    8. Dim Verschlüsseltes_Ablaufdatum As String
    9. Dim Entschlüsseltes_Ablaufdatum As String
    10. 'Uhr & Ablaufdatum
    11. Dim Aktuelles_Datum As Date = Date.Now.Date
    12. Dim Ablaufdatum As String = DateAdd(DateInterval.Day, 15, Date.Now.Date) ' Hier die zeit einstellen für die Testphase
    13. 'Passwörter
    14. Dim MD5_Pass As String = "098f6bcd4621d373cade4e832627b4f6" ' übersetzt = test
    15. 'Pfad für Zeitspeicher Datei
    16. Dim Dateipfad As String = "C:\Users\zeus\Desktop\z\Data_z.cfg" 'Pfad für Speicherdatei zu verstecken
    17. Dim Key_aus_Inputbox As String
    18. 'MD5 Hash aus Passwort erzeugen um zu vergleichen
    19. Private Function StringToMD5(ByVal Content As String) As String
    20. Dim M5 As New Security.Cryptography.MD5CryptoServiceProvider
    21. Dim ByteString() As Byte = System.Text.Encoding.ASCII.GetBytes(Content)
    22. ByteString = M5.ComputeHash(ByteString)
    23. Dim FinalString As String = Nothing
    24. For Each bt As Byte In ByteString
    25. FinalString &= bt.ToString("x2")
    26. Next
    27. Return FinalString
    28. End Function
    29. 'MD5 Hash Ende
    30. 'Beim Start der Form Passwort überprüfen !
    31. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    32. Zum_Anfang:
    33. If Not MD5_Pass = My.Settings.MD5_Pass_Speicher Then '0
    34. 'Wenn die Datei nicht existiert , dann das Ablaufdatum nehmen / Zeit verschlüsseln und Datei in vorgegebenen Pfad erstellen
    35. If Not My.Computer.FileSystem.FileExists(Dateipfad) Then '1
    36. '########################################################################################################################-Vershlüsseln Anfang (( Zeit ))
    37. Dim oAesProvider As New AesManaged
    38. Dim btClear() As Byte
    39. Dim btSalt() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    40. Dim oKeyGenerator As New Rfc2898DeriveBytes("ax59kj71l5po9u5gc0s3we13tmv", btSalt)
    41. oAesProvider.Key = oKeyGenerator.GetBytes(oAesProvider.Key.Length)
    42. oAesProvider.IV = oKeyGenerator.GetBytes(oAesProvider.IV.Length)
    43. Dim ms As New IO.MemoryStream
    44. Dim cs As New CryptoStream(ms, oAesProvider.CreateEncryptor(), CryptoStreamMode.Write)
    45. btClear = System.Text.Encoding.UTF8.GetBytes(Ablaufdatum) 'Eingang unverschlüsselt !
    46. cs.Write(btClear, 0, btClear.Length)
    47. cs.Close()
    48. Verschlüsseltes_Ablaufdatum = Convert.ToBase64String(ms.ToArray) ' Ausgang Verschlüsselt
    49. '########################################################################################################################-Vershlüsseln Ende (( Zeit ))
    50. Try 'Ablaufdatum verschlüsselt in Datei schreiben
    51. IO.File.WriteAllText(Dateipfad, Verschlüsseltes_Ablaufdatum) 'Datei erstellen und datum reinschreiben mit +20 Tage
    52. Catch ex As Exception
    53. MsgBox("Ausnahmefehler das Programm wird geschlossen !", MsgBoxStyle.Critical, "Ausnahmefehler !")
    54. End
    55. End Try 'Datei schreiben Ende
    56. Application.Restart()
    57. Else '1 'Wenn die Datei da ist , diese auslesen und vergleichen mit aktuelles Datum
    58. Verschlüsseltes_Ablaufdatum = File.ReadAllText(Dateipfad)
    59. '########################################################################################################################-Entschlüsseln Anfang (( Zeit ))
    60. Dim oAesProvider As New AesManaged
    61. Dim btCipher() As Byte
    62. Dim Entschlüsseln_() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    63. Dim oKeyGenerator As New Rfc2898DeriveBytes("ax59kj71l5po9u5gc0s3we13tmv", Entschlüsseln_)
    64. oAesProvider.Key = oKeyGenerator.GetBytes(oAesProvider.Key.Length)
    65. oAesProvider.IV = oKeyGenerator.GetBytes(oAesProvider.IV.Length)
    66. Dim ms As New IO.MemoryStream
    67. Dim cs As New CryptoStream(ms, oAesProvider.CreateDecryptor(), CryptoStreamMode.Write)
    68. Try
    69. btCipher = Convert.FromBase64String(Verschlüsseltes_Ablaufdatum) 'Verschlüsselt rein
    70. cs.Write(btCipher, 0, btCipher.Length)
    71. cs.Close()
    72. Entschlüsseltes_Ablaufdatum = System.Text.Encoding.UTF8.GetString(ms.ToArray) 'Entschlüsselt raus
    73. Catch
    74. MsgBox("Ein Lesefehler ist aufgetreten !" & vbCrLf & vbCrLf & "Das Programm wird deshalb beendet !", MsgBoxStyle.Exclamation, "Fehler!")
    75. End
    76. End Try
    77. '########################################################################################################################-Entschlüsseln Ende (( Zeit ))
    78. If Aktuelles_Datum > CDate(Entschlüsseltes_Ablaufdatum) Then '2
    79. While Not MD5_Pass = My.Settings.MD5_Pass_Speicher
    80. Key_aus_Inputbox = InputBox("Bitte geben Sie ihren Key ein !", "Ende der Testphase ereicht !")
    81. My.Settings.MD5_Pass_Speicher = StringToMD5(Key_aus_Inputbox)
    82. My.Settings.Save()
    83. If Key_aus_Inputbox = "" Then '3
    84. End
    85. End If '3
    86. End While
    87. GoTo Zum_Anfang
    88. Else '2
    89. End If '2
    90. End If '1
    91. ' Verbleibende Zeit anzeigen
    92. Dim Zeitdiverrenz_Anzeige As String = CStr(DateDiff("d", Aktuelles_Datum, Entschlüsseltes_Ablaufdatum))
    93. Label1.Text = "Es sind noch " & Zeitdiverrenz_Anzeige & " Testzeit übrig "
    94. Else '0 'Wenn Key Vorhanden , direckt von Start nach hier springen !
    95. Label1.Text = "Mit Key aktiviert !"
    96. End If '0
    97. End Sub
    98. 'Manuelle Passworteingabe
    99. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    100. While Not MD5_Pass = My.Settings.MD5_Pass_Speicher
    101. InputBox_Passworteingabe_MD5 = InputBox("Bitte geben Sie jetz ihren Serial_Key ein !" & vbCrLf & vbCrLf & "Anschliesend wird das Programm beendet um den Serial_Key ordnungsgemäß zu übernehmen !", "Serial Key ?")
    102. My.Settings.MD5_Pass_Speicher = StringToMD5(InputBox_Passworteingabe_MD5) 'Hier wird das Pass nach Eingabe in MD5 gewandelt und zb. in My.Setings gespeichert !
    103. My.Settings.Save()
    104. If InputBox_Passworteingabe_MD5 = "" Then
    105. End
    106. End If
    107. End While
    108. Me.Refresh()
    109. If MD5_Pass = My.Settings.MD5_Pass_Speicher Then
    110. Label1.Text = "Mit Key aktiviert !"
    111. End If
    112. End Sub
    113. End Class




    'Dieser Button dient nur testzwecken !

    VB.NET-Quellcode

    1. 'Dieser Button dient nur testzwecken !
    2. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    3. My.Settings.Reset()
    4. End
    5. End Sub
    6. End Class







    Download Testmappe + MD5 Hash Ersteller
    www71.zippyshare.com/v/38908044/file.html

    LG ANdre.................................................................... :whistling:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TVX“ ()

    Da sind ja immernoch GoTo's drin xD
    Ein kleiner Tipp: Verteile die Methode doch auf mehrere Untermethoden, z.B. Prüfen, Datei anlegen, und was sonst noch anfällt. Das können auch Functions sein die einen z.B. einen Boolean zurückgeben. In einer zentralen Prüf-Routine könntest du dann in wenigen Zeilen diese Hilfsmethoden ansteuern und ggf erneut aufrufen.

    Programmcode den man mehrmals ausführen will (aber nicht mehrmals aufschreiben sollte) lagert man in Methoden aus. Die Codeteile mit GoTo anzuspringen ist schon länger aus der Mode xD
    Jo genau 1 goto ist noch drinn,wollte das eigentlich mit Me.Refresh oder Application.Restart lösen

    Man sollte meinen das das den selben Efeckt ,da er dann oben wieder anfängt aber dem ist nicht so ,
    ich müsste Restart 2x ausführen


    So weit funktioniert es super , Da ich Strings damit verschlüsseln kann ,kann ich mir aussuchen
    ob ich ne Datei erstelle oder es in die reg schreibe !
    Zu beachten sei halt nur die Berechtigung demnach anzupassen -(( Admin )) !

    LG Andre............................................ :)
    Aber Du musst schon zugeben, sonderlich kreativ, bzw. geistreich sind Deine Code-Beispiele auch nicht, oder? Ich mein, Du bist ja jetzt auch schon ne Weile hier und Dir wurde es schon sehr oft gesagt, dass manche Programmiertechniken einfach Müll sind. Nur richtig auseinandersetzen tust Dich wohl damit auch nicht. Versteh´s nicht falsch, Du gibst Dir viel Mühe und setzt Dich bestimmt oft hin und codest für jemanden was zusammen, weil Du es ja für Dich als Übung brauchst. So jedenfalls hab ich´s mal aus einem Deiner Posts herausgelesen. Nur, was halt dabei rauskommt, hilft den anderen meist nicht viel. Deine Codes sind oft sehr wirr und eben leider voll mit Fehlern. Du kannst nicht einfach irgendwas zusammentippen und es dann immer als "Hier haste es, hab´s schnell ausm Ärmel geschüttelt"-Lösung präsentieren. Das kommt gar nicht gut an. Anders wär´s, wenn Deine Codes Hieb- und Stichfest sind, aber so machst Du Dich ein bisschen lächerlich. Nicht in den falschen Hals kriegen bitte, ich sag´s Dir nur, wie ich es sehe. Ich mein, Du hast schon Potenzial, aber eben ein bisschen runter vom Gas, auch wenn Du Deine Lösung für Dich noch so als gut erachtest. Denk an den, der hier Hilfe gesucht hat, den hilft es nicht und Deinem Ego auch nicht, wenn Du jedesmal eine aufn Deckel bekommst. Aber da scheinst Du ja ziemlich resistent zu sein.

    Nimm das Gesagte nicht als harte Kritik, sondern setz Dich mal richtig mit dem Thema .NET auseinander. Deine Codes sind ein MischMasch zwischen altem VB6, .NET und ich frag mich, wenn ich mir Deine Codes so ansehe, ob Du wirklich weißt, was die verschiedenen Datentypen überhaupt sind. Beispielsweise wandelst Du Strings in Strings, nutzt GOTO´s, InputBoxen, MsgBoxen, Nutzt nicht die angebotenen Funktionen des FrameWorks, sondern den My-NameSpace, Try-Catches, ohne wirkliche Fehlerbehandlung, DateDiff, DateAdd und und und. Es gibt wirklich für jedes altes VB6-Überbleibsel ein besseres, effizienteres, objektorientiertes Gegenstück.

    Du musst verstehen, dass das dem Hilfesuchenden nicht hilft und Dir hilft es letztendlich auch nicht wirklich viel.

    In diesem Sinne, nimms Dir mal zu Herzen und mach was aus Deinem Potenzial...


    Danny
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ist Klar und deshalb jetz ohne goto ^^

    1x Button1 für Keyeingabe
    Label1 für zustandsanzeige

    Button2 nur für test nötig um Pass wieder zu löschen


    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Security.Cryptography
    4. Public Class Form1
    5. 'InputBox Eingabe
    6. Dim Key_aus_Inputbox As String
    7. 'Uhr & Ablaufdatum
    8. Dim Aktuelles_Datum As Date = Date.Now.Date
    9. Dim Ablaufdatum As String = DateAdd(DateInterval.Day, 15, Date.Now.Date) ' Hier die zeit einstellen für die Testphase
    10. 'Private Einstellungen MD5 Passwort
    11. Dim MD5_Pass As String = "098f6bcd4621d373cade4e832627b4f6" 'MD5 Passwort - übersetzt = test
    12. 'MD5 Hash aus Passwort erzeugen um zu vergleichen
    13. Private Function StringToMD5(ByVal Content As String) As String
    14. Dim M5 As New Security.Cryptography.MD5CryptoServiceProvider
    15. Dim ByteString() As Byte = System.Text.Encoding.ASCII.GetBytes(Content)
    16. ByteString = M5.ComputeHash(ByteString)
    17. Dim FinalString As String = Nothing
    18. For Each bt As Byte In ByteString
    19. FinalString &= bt.ToString("x2")
    20. Next
    21. Return FinalString
    22. End Function
    23. 'MD5 Hash Ende
    24. 'String verschlüsseln Anfang + Declaration
    25. Dim String_verschlüsseln_Eingabe As String, String_entschlüsseln_Eingabe As String
    26. '----------------------------------------------------------------------------------'
    27. Private Function String_verschlüsseln_Ausgabe() As String
    28. Dim oAesProvider As New AesManaged
    29. Dim btClear() As Byte
    30. Dim btSalt() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    31. Dim oKeyGenerator As New Rfc2898DeriveBytes("ax59kj71l5po9u5gc0s3we13tmv", btSalt)
    32. oAesProvider.Key = oKeyGenerator.GetBytes(oAesProvider.Key.Length)
    33. oAesProvider.IV = oKeyGenerator.GetBytes(oAesProvider.IV.Length)
    34. Dim ms As New IO.MemoryStream
    35. Dim cs As New CryptoStream(ms, oAesProvider.CreateEncryptor(), CryptoStreamMode.Write)
    36. btClear = System.Text.Encoding.UTF8.GetBytes(String_verschlüsseln_Eingabe) 'Eingang unverschlüsselt !
    37. cs.Write(btClear, 0, btClear.Length)
    38. cs.Close()
    39. Return Convert.ToBase64String(ms.ToArray) ' Ausgang Verschlüsselt
    40. End Function 'String verschlüsseln Ende
    41. 'String Entschlüsseln Anfang
    42. Private Function String_entschlüsseln_Ausgabe() As String
    43. Dim oAesProvider As New AesManaged
    44. Dim btCipher() As Byte
    45. Dim Entschlüsseln_() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
    46. Dim oKeyGenerator As New Rfc2898DeriveBytes("ax59kj71l5po9u5gc0s3we13tmv", Entschlüsseln_)
    47. oAesProvider.Key = oKeyGenerator.GetBytes(oAesProvider.Key.Length)
    48. oAesProvider.IV = oKeyGenerator.GetBytes(oAesProvider.IV.Length)
    49. Dim ms As New IO.MemoryStream
    50. Dim cs As New CryptoStream(ms, oAesProvider.CreateDecryptor(), CryptoStreamMode.Write)
    51. Try
    52. btCipher = Convert.FromBase64String(String_entschlüsseln_Eingabe) 'Verschlüsselt rein
    53. cs.Write(btCipher, 0, btCipher.Length)
    54. cs.Close()
    55. Return System.Text.Encoding.UTF8.GetString(ms.ToArray) 'Entschlüsselt raus
    56. Catch
    57. MsgBox("Ein Lesefehler ist aufgetreten !" & vbCrLf & vbCrLf & "Das Programm wird deshalb beendet !", MsgBoxStyle.Exclamation, "Fehler!")
    58. End
    59. End Try
    60. End Function 'String Entschlüsseln Ende
    61. 'Security_Manager Anfang
    62. Private Sub Security_Manager()
    63. 'MD5 Pass überprüfen
    64. If MD5_Pass = My.Settings.MD5_Pass_Speicher Then '0
    65. Label1.Text = "Mit Key aktiviert !"
    66. Else '0
    67. 'Prüfen ob Datei Exsistiert / Wenn nicht dann erstellen / wenn doch dann auslesen und prüfen
    68. If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\AZ_Key", "azd", Nothing) Is Nothing Then '1
    69. String_verschlüsseln_Eingabe = Ablaufdatum
    70. Try
    71. My.Computer.Registry.SetValue("HKEY_CURRENT_USER\AZ_Key", "azd", String_verschlüsseln_Ausgabe) 'xxxxxxxxxxxxxxxxxxxxxxxxxx
    72. Catch ex As Exception
    73. MsgBox("Ausnahmefehler das Programm wird geschlossen !", MsgBoxStyle.Critical, "Ausnahmefehler !")
    74. End
    75. End Try
    76. String_entschlüsseln_Eingabe = CStr(My.Computer.Registry.GetValue("HKEY_CURRENT_USER\AZ_Key", "azd", Nothing)) 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    77. Dim Zeitdiverrenz_Anzeige As String = CStr(DateDiff("d", Aktuelles_Datum, String_entschlüsseln_Ausgabe()))
    78. Label1.Text = "Es sind noch " & Zeitdiverrenz_Anzeige & " Testzeit übrig "
    79. Label1.ForeColor = Color.Orange
    80. Else '1
    81. String_entschlüsseln_Eingabe = CStr(My.Computer.Registry.GetValue("HKEY_CURRENT_USER\AZ_Key", "azd", Nothing)) 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    82. 'Aktuelles Datum mit Ablaufdatum aus Datei vergleichen
    83. If Aktuelles_Datum > CDate(String_entschlüsseln_Ausgabe()) Then '3
    84. ' Wenn nicht stimmt MD5 Pass prüfen
    85. While Not MD5_Pass = My.Settings.MD5_Pass_Speicher
    86. Key_aus_Inputbox = InputBox("Bitte geben Sie ihren Key ein !", "Ende der Testphase ereicht !")
    87. My.Settings.MD5_Pass_Speicher = StringToMD5(Key_aus_Inputbox)
    88. My.Settings.Save()
    89. If Key_aus_Inputbox = "" Then '4
    90. End
    91. End If '4
    92. End While
    93. 'wenn Md5 Pas richtig eingegenen dann dass
    94. Label1.Text = "Mit Key aktiviert !"
    95. Label1.ForeColor = Color.Lime
    96. Else '3
    97. String_entschlüsseln_Eingabe = CStr(My.Computer.Registry.GetValue("HKEY_CURRENT_USER\AZ_Key", "azd", Nothing)) 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    98. Dim Zeitdiverrenz_Anzeige As String = CStr(DateDiff("d", Aktuelles_Datum, String_entschlüsseln_Ausgabe()))
    99. Label1.Text = "Es sind noch " & Zeitdiverrenz_Anzeige & " Testzeit übrig "
    100. Label1.ForeColor = Color.Orange
    101. End If '3
    102. End If '1
    103. End If '0
    104. End Sub 'Security_Manager Ende
    105. 'Manuelle Passworteingabe Anfang
    106. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    107. While Not MD5_Pass = My.Settings.MD5_Pass_Speicher
    108. Key_aus_Inputbox = InputBox("Bitte geben Sie jetz ihren Serial_Key ein !" & vbCrLf & vbCrLf & "Anschliesend wird das Programm beendet um den Serial_Key ordnungsgemäß zu übernehmen !", "Serial Key ?")
    109. My.Settings.MD5_Pass_Speicher = StringToMD5(Key_aus_Inputbox) 'Hier wird das Pass nach Eingabe in MD5 gewandelt und zb. in My.Setings gespeichert !
    110. My.Settings.Save()
    111. If Key_aus_Inputbox = "" Then
    112. End
    113. End If
    114. End While
    115. My.Application.SaveMySettingsOnExit = True
    116. If MD5_Pass = My.Settings.MD5_Pass_Speicher Then
    117. Label1.Text = "Mit Key aktiviert !"
    118. Label1.ForeColor = Color.Lime
    119. End If
    120. End Sub ' Manuelle Passworteingabe Ende
    121. 'FORM START
    122. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    123. Security_Manager()
    124. End Sub
    125. End Class




    Button2 wird nur für Funktionstest verwendet !

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. My.Settings.Reset()
    3. Application.Restart()
    4. End Sub


    LG Andre................................................................................................................ ;)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „TVX“ ()

    Sieht ja schon besser aus! xD
    So 100%ig gefällt mir das ganze immer noch nicht - vllt weil ich deinen Ansatz das ganze "sicherer" zu machen viel zu wirr halte. Auf jeden Fall ausbaufähig sind z.B. Variablen wie Key_aus_Inputbox. In dem Fall würde ich eben keine Variable klassenweit deklarieren sondern den Methoden als Parameter übergeben. So hält man Ordnung und das ganze System bleibt Übersichtlicher. Wenn du viel Code auf die Art produzierst wirst du irgendwann nicht mehr wissen was genau passiert weil alles mit allem verstrickt ist. Durch übergeben von Parametern siehst du direkt "ah - die Methode will ein Passwort-String haben und gibt das und das zurück", mal eine Gegenüberstellung:

    VB.NET-Quellcode

    1. private Passwort_Eingabe_FensterXYZ as String 'steht iwo gaaaaanz Oben, die Variable wird irgendwo zugewiesen
    2. Private Function prüfePasswort() as Boolean'steht iwo mittendrin
    3. '... Passwort_Eingabe_FensterXYZ prüfen
    4. 'return ...
    5. end Function


    VB.NET-Quellcode

    1. Private Function prüfePasswort(byval Passwort as String) as Boolean
    2. '...
    3. 'return ...
    4. end Function


    Du siehst sofort, dass prüfePasswort() immer irgendwie an eine Variable "gebunden" ist. Diese kann von überall aus verändert werden. (Soll nicht heißen, dass das immer schlecht ist!). Außerdem - wenn du mehrere Passwortfelder hättest - müsstest du andauernd neue Methoden schreiben. prüfePasswort(passwort) ist da viel flexibler. Du kannst es immer wiederverwenden.
    Btw brauchst du die Variable Key_aus_Inputbox auch NUR in deiner GültigkeitsPrüfRoutine - Methoden die ganz andere Aufgaben erfüllen wollen von der Variable garnichts wissen - trotzdem zeigt IntelliSense sie dir an. Das kann ein ganz schöner Durcheinander werden.

    Der Nächste Schritt für mich wäre das ganze Prüf-System in eine Klasse auszulagern. Würde für mich insofern Sinn machen, weil das ein relativ großes Problem ist, das ggf auch mehrmals gelöst werden möchte^^ Wenn du Klassen für dich Nutzt kannst du deinen Code sinnvoll gliedern und zusammenhänge darstellen. Außerdem verteilst du ein großes Problem (dein komplettes Programm) auf viele kleine Probleme (Prüfen, Updater, Speichern/Laden, eigene Controls, Datenstrukturen, und und und). In der Form1-Klasse müsste im Endeffekt nur folgendes stehen:


    VB.NET-Quellcode

    1. Public Const PFAD_TRIAL_DATUM As String = "/daten/trial.tri"
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. 'Macht alles automatisch: Datei anlegen wenn nicht vorhanden, auslesen wenn da. Auch das korrekte Passwort wird hier geladen/alternativ übergeben
    4. Dim trialCecker = New TrialChecker(PFAD_TRIAL_DATUM)
    5. trialCecker.StandardPasswortEingabe() 'Hier wird das Eingegebene Passwort gesetzt
    6. 'trialCecker.Passwort = eigenerDialogZumPasswortEingeben.Passwort
    7. If trialCecker.isExpired Then 'und hier überprüft
    8. 'trial ist abgelaufen, dialog anzeigen, programm schließen
    9. End If
    10. End Sub


    Wie der TrialChecker arbeitet ist Problem des TrialCheckers. Das Programm welches ihn verwendet kümmert es nicht weiter und kann gemütlich ganz andere Probleme lösen^^

    Bevor du das versuchst umzusetzten: Lass deinen Anti-Hacker-Kiddys-Verwirr-Algo raus. Sowas ist sicherer aber immernoch weit weg von "sicher". Sowas kann jemand der den Source benutzen will einbauen. Dein Code sollte das Prinzip so einfach wie möglich demonstrieren - aber nicht mehr, denn das macht einen 20 Zeilen Code mal schnell 100 Zeilen lang und unübersichtlich.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FreakJNS“ ()