Serial Erstellen

  • Hallo Leute,

    ich möchte gerne eine Serien nummer für meine Produkte generieren. Die Serien nummer Selber besteht aus diversen wichtigen informationen.

    damit diese nicht von jedem ausgelesen werden können möchte ich diese verschlüsseln. Sie muss aber wieder entschlüsselt werden können.

    Ich hab dazu zunächst _StringEncrypt verwendet dabei entstehen aber sehr lange keys das möchte ich eigentlich nicht.

    meine infos die ich eingebe sind in der regel 18 Zeichen lang!


    mit der _String Encrypt kamen 80 Zeichen raus

    ideal wäre wenn aus den 18 so 24 Zeichen würden in dem Stil XXXXXX-XXXXXX-XXXXXX-XXXXXX

    Hätte mir da jemand eine idee?

  • Das bekommst nur durch Hashen hin und das lässt sich nichtmehr entschlüsseln.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Tut's eine einfache Verschlüsslung? Z.B. sowas hier?

    [autoit]


    $sString = "Hello, World!"
    $iXOR = 17

    [/autoit][autoit][/autoit][autoit]

    $sString = _Crypt_XOR($sString, $iXOR)
    ConsoleWrite($sString & @CRLF)
    $sString = _Crypt_XOR($sString, $iXOR)
    ConsoleWrite($sString & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    Func _Crypt_XOR($sInput, $iXOR)
    $aASCII = StringToASCIIArray($sInput)
    For $i = 0 To UBound($aASCII) - 1
    $aASCII[$i] = BitXOR($aASCII[$i], $iXOR)
    Next
    Return StringFromASCIIArray($aASCII)
    EndFunc

    [/autoit]

    Bleibt halt gleichlang... ^^

  • chesstiger : Wenn du das so machst ist das was dabei rauskommt nicht sicherer als die Rot13 'Verschlüsselung' ^^
    Wenn schon Xor dann mit einem anständigen Key... :whistling: *hust*
    @Hanssony: Um was für 'Informationen' handelt es sich denn die du da im Key 'verstecken' möchtest? Wo soll der Key generiert werden? Wo kommen die Informationen her? & Und in wie fern möchtest du diese Infos auf User-Seite des Programms benutzen?

    LG
    Christoph :)

  • genau so ist es muss nicht sicher sein nur nicht auf anhieb erkennbar...

    z.B. Ablaufdatum soll in der serial drin sein weil die "tools" quasi ein "haltbarkeitsdatum" haben sollen.


    Die Funktion von dir chesstiger ist schon ganz nett gefällt mir ich würde es nur gerne noch so machen dass keine sonderzeichen sondern nur Buchstaben und Zahlen bei Rauskommen

    Einmal editiert, zuletzt von hanssonny (4. Oktober 2013 um 09:09)

  • Dann nimm eine einfache ROT-Verschlüsslung. ^^

    Spoiler anzeigen
    [autoit]


    Func _RotString($sText, $iRot, $bReverse = False)
    If $bReverse Then $iRot = 26 - $iRot
    $aiASCII = StringToASCIIArray($sText)

    [/autoit] [autoit][/autoit] [autoit]

    For $iChar = 0 To UBound($aiASCII) - 1
    $aiASCII[$iChar] = _RotN($aiASCII[$iChar], $iRot)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Return StringFromASCIIArray($aiASCII)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _RotN($iChar, $iRot)
    If (($iChar >= Asc("A")) And ($iChar <= Asc("Z"))) Then
    $iChar = Mod((($iChar - Asc("A")) + $iRot), 26) + Asc("A")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If (($iChar >= Asc("a")) And ($iChar <= Asc("z"))) Then
    $iChar = Mod((($iChar - Asc("a")) + $iRot), 26) + Asc("a")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $iChar
    EndFunc
    ConsoleWrite(_RotString("DeinSerial", 13) & @CRLF)

    [/autoit]

    :D

    lg

  • so ganz klappt das noch nicht die funktion gibt nix zurück


    [autoit]


    $Verschluesselungskey= 13
    Func generate()
    ; Input Felder Auselsen
    $startdatum = GUICtrlRead($startdatuminput)
    $enddatum = GUICtrlRead($enddatuminput)
    $produktid = GUICtrlRead($produktidinput)

    [/autoit][autoit][/autoit][autoit]

    ;String zusammensetzen
    $string = $startdatum & $enddatum & $produktid

    [/autoit][autoit][/autoit][autoit]

    ;Verschlüsseln
    ;$key = _StringEncrypt(1,$string,"xelanin",1)

    [/autoit][autoit][/autoit][autoit]

    ;$key = _Crypt_XOR($string, $Verschluesselungskey)
    $key = _RotString($key, $Verschluesselungskey)
    ConsoleWrite($key & @CRLF)
    GUICtrlCreateLabel("Dongle Serial (verschlüsselt):",40, 250, 600,30)
    GUICtrlCreateLabel($key,220, 250, 300,30)

    [/autoit][autoit][/autoit][autoit]

    $clipput = GUICtrlCreateButton("Key Clip put",270,200,100)

    [/autoit][autoit][/autoit][autoit]

    ;$encrypt = _Crypt_XOR($key, $Verschluesselungskey)
    $encrypt = _RotString($key, $Verschluesselungskey)
    GUICtrlCreateLabel("Dongle Serial (klartext):",40, 290, 600,30)
    GUICtrlCreateLabel($encrypt,220, 290, 600,30)

    [/autoit][autoit][/autoit][autoit]

    ;$encrypt = _StringEncrypt(0,$key,"xelanin",1)

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit][autoit][/autoit][autoit]

    ;-------------------------------------------------------------------------------
    ;---Verschlüsselungs- / Entschüsselungs Funktion
    ;-------------------------------------------------------------------------------
    Func _RotString($sText, $iRot, $bReverse = False)
    If $bReverse Then $iRot = 26 - $iRot
    $aiASCII = StringToASCIIArray($sText)

    [/autoit][autoit][/autoit][autoit]

    For $iChar = 0 To UBound($aiASCII) - 1
    $aiASCII[$iChar] = _RotN($aiASCII[$iChar], $iRot)
    Next

    [/autoit][autoit][/autoit][autoit]

    Return StringFromASCIIArray($aiASCII)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _RotN($iChar, $iRot)
    If (($iChar >= Asc("A")) And ($iChar <= Asc("Z"))) Then
    $iChar = Mod((($iChar - Asc("A")) + $iRot), 26) + Asc("A")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If (($iChar >= Asc("a")) And ($iChar <= Asc("z"))) Then
    $iChar = Mod((($iChar - Asc("a")) + $iRot), 26) + Asc("a")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Return $iChar
    EndFunc
    ConsoleWrite(_RotString("DeinSerial", 13) & @CRLF)

    [/autoit]
  • ich habs so versucht ...

    aber das klappt nicht so ganz

    [autoit]

    If (($iChar >= Asc("0")) And ($iChar <= Asc("9"))) Then $iChar = Mod((($iChar - Asc("0")) + $iRot), 10) + Asc("0") EndIf

    [/autoit]
  • Warum? Ist doch richtig:

    Spoiler anzeigen
    [autoit]


    Func _RotN($iChar, $iRot)
    If (($iChar >= Asc("A")) And ($iChar <= Asc("Z"))) Then
    $iChar = Mod((($iChar - Asc("A")) + $iRot), 26) + Asc("A")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If (($iChar >= Asc("a")) And ($iChar <= Asc("z"))) Then
    $iChar = Mod((($iChar - Asc("a")) + $iRot), 26) + Asc("a")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If (($iChar >= Asc("0")) And ($iChar <= Asc("9"))) Then
    $iChar = Mod((($iChar - Asc("0")) + $iRot), 10) + Asc("0")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $iChar
    EndFunc

    [/autoit]

    lg

  • naja weil wenn ich zahlen eingebe z.B. 16041990 werden die verschlüsselt das klappt soweit ... nur die entschlüsselung klappt dann nicht mehr

    Bsp:

    Original: 16041990
    Verschlüsselt: 49374223
    Enschlüsselt: 72607556

  • Wenn es nur darum geht die Informationen ein bisschen zu 'verstecken' kannst du dir das mit dem ROT-Verfahren auch sparen und einfach sowas hier machen:

    Spoiler anzeigen
    [autoit]

    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Func _Encrypt($sPlainText)
    Return _StringReverse(_StringToHex($sPlainText))
    EndFunc ;==>_Encrypt

    [/autoit] [autoit][/autoit] [autoit]

    Func _Decrypt($sData)
    Return _HexToString(_StringReverse($sData))
    EndFunc ;==>_Decrypt

    [/autoit]

    LG
    Christoph :)

  • so?


    [autoit]

    If (($iChar >= Asc("0")) And ($iChar <= Asc("10"))) Then
    $iChar = Mod((($iChar - Asc("0")) + $iRot), 10) + Asc("0")
    EndIf

    [/autoit]


    Laut Wiki
    Da es in einigen Fällen auch sinnvoll ist, dass Zahlen nicht auf den ersten Blick erkannt werden können, wurde zudem ein Verfahren namens ROT18 entwickelt, welches bei den Großbuchstaben die Ziffern von 0 bis 9 einbezieht, bei den Kleinbuchstaben aber mit ROT13 identisch ist. ROT18 wird allerdings von keinem gängigen E-Mail-Programm oder Newsreader unterstützt. Alternativ gibt es das Verfahren ROT5, das die Zahlen extra behandelt und sie um fünf Stellen weiterschiebt.

    2 Mal editiert, zuletzt von hanssonny (5. Oktober 2013 um 09:37)

  • ne macht keinen unterschied.

    wenn reverse true oder false ist auch kein unterschied.

    ich hab $verschlüsselungskey auch mal auf 18 gesetzt ... aber auch keine veränderung bzw Verbesserung