XOR Verschlüsselung

  • Einfache XOR 'Verschlüsselung' mit automatischer Wiederholung des Codeworts... ;)

    [autoit]

    Func _XORCrypt($sText, $sKey)
    Local $sResult
    For $i = 1 To StringLen($sText)
    $sResult &= Chr(BitXOR(Asc(StringMid($sText, $i, 1)), Asc(StringMid($sKey, Mod($i - 1, StringLen($sKey)) + 1)), 1))
    Next
    Return $sResult
    EndFunc ;==>_XORCrypt

    [/autoit]

    LG
    Christoph :)

  • Meine Rede....
    Eine der wenigen nachweisbar wirklich sicheren weil unknackbaren Methoden zu verschlüsseln!
    Ein Einmal-Zufallsschlüssel mit der Länge des zu verschlüsselnden "Strings" geXORed, fertig ist das Thema....
    Und ob ich heutzutage einen Schlüssel mit (in Minuten knackbaren) 128- oder 256 Bit habe oder direkt einen SICHEREN Schlussel mit bspw 20MB Größe ist völlig unerheblich....

  • Wieso nimmst du dafür nicht einen MD5- bzw. SHA256-Hash? Denn so kann das Passwort immer noch ausgelesen werden, wenn man den Schlüssel aus dem Skript ausliest.

  • Hallo
    Ich weiß der Thread ist schon recht alt aber Verschlüsselung ist ja eigentlich immer aktuell...

    Ich habe die Funktion oben gesehen und wollte sie ausprobieren aber funktioniert leider nicht.
    Hat vielleicht jemand ein funktionierendes Beispiel für die XOR Methode?

    Danke

    Spoiler anzeigen
    [autoit]

    $sText = InputBox ("Daten","")
    $sKey = InputBox ("Passwort","")
    #$sResult = ""

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

    _XORCrypt ($sText, $sKey)

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

    Func _XORCrypt($sText, $sKey)
    Local $sResult
    MsgBox (1,"1","")
    For $i = 1 To StringLen($sText)
    $sResult = Chr(BitXOR(Asc(StringMid($sText, $i, 1)), Asc(StringMid($sKey, Mod($i - 1, StringLen($sKey)) + 1)), 1))

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

    Next
    Return $sResult
    EndFunc ;==>_XORCrypt
    MsgBox (1,"",$sResult)

    [/autoit]

    Achja und wie sage ich das ich ver bzw. entschlüsseln will?

    Einmal editiert, zuletzt von Gandalf (22. Januar 2014 um 17:35)

    • Offizieller Beitrag

    Die Funktion ist fehlerhaft und Du hast beim Aufruf auch noch Fehler gemacht. So funktioniert es:

    Spoiler anzeigen
    [autoit]


    $sText = InputBox("Daten", "")
    $sKey = InputBox("Passwort", "")
    $sResult = _XORCrypt($sText, $sKey)
    ConsoleWrite('verschlüsselt: ' & $sResult & @CR)
    $sResult = _XORCrypt($sResult, $sKey)
    ConsoleWrite('entschlüsselt: ' & $sResult & @CR)

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

    Func _XORCrypt($sText, $sKey)
    Local $sResult = ''
    For $i = 1 To StringLen($sText)
    $sResult &= Chr(BitXOR(Asc(StringMid($sText, $i, 1)), Asc(StringMid($sKey, Mod($i - 1, StringLen($sKey)) + 1, 1))))
    Next
    Return $sResult
    EndFunc ;==>_XORCrypt

    [/autoit]
  • chesstiger ja ich habe das noch editiert...

    Wenn ich das jetzt richtig verstehe kann man durch eine zweite XOR Verschlüsselung den Entschlüsselten Zustand wiederherstellen?!

    Wie sieht es mit der Sicherheit dieser Verschlüsselung aus? im Vergleich zu AES oder sonstiegen?

  • Zitat


    Wenn ich das jetzt richtig verstehe kann man durch eine zweite XOR Verschlüsselung den Entschlüsselten Zustand wiederherstellen?!


    Das belegt, dass du nicht weißt, was eine XOR-Verschlüsslung ist...

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    $iBase = 42 ;Binär: 00101010
    $iXOR = 25 ;Binär: 00011001

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

    ConsoleWrite("Startwerte: " & @LF)
    ConsoleWrite("$iBase: " & $iBase & @LF)
    ConsoleWrite("$iXOR: " & $iXOR & @LF & @LF)

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

    $iCalcOR = BitOR($iBase, $iXOR)
    $iCalcXOR = BitXOR($iBase, $iXOR)
    ;Was passiert hier?
    ;Die beiden Zahlen $iBase und $iXOR werden _bitweise_ (Bit für Bit) mit einem _exklusiven logischen ODER_ (XOR => eXclusive OR) verknüpft.
    ;Was ein logisches ODER ist, sollte ja klar sein. Das Ergebnisbit ist 1, wenn eines von den beiden Ausgangsbits auch 1 ist.

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

    ;00101010 (42)
    ;00011001 (25)
    ; - OR -
    ;00111011 (59)

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

    ;Ein exklusives ODER setzt das Ergebnisbit aber nur auf 1, wenn nur einer von den beiden Ausgangsbits 1 ist! Wenn beide = 1 sind, ist das Ergebnis 0.

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

    ;00101010 (42)
    ;00011001 (25)
    ; - XOR -
    ;00110011 (51)

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

    ConsoleWrite("OR => " & $iCalcOR & @LF)
    ConsoleWrite("XOR => " & $iCalcXOR & @LF)

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

    ;Und wenn du jetzt einmal $iCalcXOR (das "Verschlüsselte") mit $iXOR XOR-Verknüpfst...
    ;00110011 (51)
    ;00011001 (25)
    ; - XOR -
    ;00101010 (42) => $iBase

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

    $iCalcXOR_Reverse = BitXOR($iCalcXOR, $iXOR)

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

    ConsoleWrite("XOR Reverse => " & $iCalcXOR_Reverse & " (" & $iBase & ")" & @LF)

    [/autoit]

    Gruß

  • chesstiger Vielen Dank! Habs zwar dreimal lesen müssen aber dann hats pling gemacht...

    ist es möglich eine one time pad Verschlüsselung in Autoit durchzuführen?

    Ich meine klar ich muss hier keine Nuklearen Codes aufbewahren oder so aber würde mich interessieren ob man einen Text so verschlüsseln kann, das er nicht wieder herzustellen ist auch nicht durch bruteforce (naja 100% gibt es nicht ich weiß).

  • ist es möglich eine one time pad Verschlüsselung in Autoit durchzuführen?


    Wieso sollte das nicht gehen? Du hast die Funktion für die Verschlüsselung und die Möglichkeit zufällige Zeichen zu erzeugen, fehlt also nichts für ein One Time Pad.