Text auslesen dann nach jedem 7.Buchstaben trennen. und den code zurck in Buchstaben Vewandeln.

  • Ich habe mit Hotkeyset jeder Taste eine Function zugewiesen Z.B. Taste A = Send(0000000) ,B = Send 000001 usw.
    das verschlüsselt den text.

    ich bekomme es aber nicht hin, den code wieder umzuwandeln.
    Ich muss die Datei auslesen nach jedem 7. trennen und dann so mit if i-wie den code endschlüsseln,

    Währe net wenn ihr mir helfen könntet

    mfg
    Buphx

    Spoiler anzeigen
  • Sry Script ist auf schul pC Komme da nich ran kann erst morgen wieder Posten
    Also noch mal genauer
    Jeder Buchstabe wird in 0en und 1sen aufgeteilt. Für jeden Buchstaben einen 7stelligen Code.
    A = 000000
    B = 000001
    C = 000010
    D = 000011
    ... = ...

    So wie kann ich nun was Programieren das eine Text datei in der nur 0en + 1sen sind ausgelesenwird und mir alles wieder entschlüsselt wird.

  • [autoit]


    #include <Array.au3>
    $sString = "000000100010010001100100101101101000110011"
    Dim $aArray[StringLen($sString)/7]
    for $i = 1 to StringLen($sString)/7
    $aArray[$i-1] = StringLeft($sString, 7)
    $sString = StringTrimLeft($sString, 7)
    Next
    _ArrayDisplay($aArray)

    [/autoit]


    Dann kannst du mittels If + Then prüfen, z.B:

    [autoit]


    for $i = 0 to Ubound($aArray) -1
    If $aArray[$i] = 0000001 Then $aArray = "A"
    next

    [/autoit]


    So gehts
    mfg, tim :)

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • das hat schon mal functioniert aber ich möchtenicht immer alles in das Autoit script rein Kopieren muüssen was ich entschlüsseln will kann man das nicht mit

    Code
    _filereadtoarray("Verschlüsselt.txt" $sString)

    als variable speichern?

    Außer dem kommt bei mir dieser error:

    Code
    F:\Downloads\_Vessler.au3 (12) : ==> Subscript used with non-Array variable.:
    If $aArray[$i] = 0000001 Then $aArray = "A"
    If $aArray^ ERROR
    >Exit code: 1	Time: 0.208
  • Das geht nur, wenn die einzelnen Codes untereinender stehen, also
    0000001
    0010010
    usw...
    Dann kannst du dir das 1. Script sparen.
    Wenn du die Codes immer hintereinander speicherst (00000010001001) musst du es so machen wie ich.

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • Man sollte erstmal die Grundlagen Beherrschen, bevor man ein komplexes Verschlüsselungsverfahren in die Tat umsetzt.
    So eine ähnliche Sache hab ich auch schon verwendet (also alles in 0 und 1 aufgeteilt und dann wild durcheinander gewürfelt :P) um sachen zu ver und entschlüsseln.
    Es ist aber weitaus sinnvoller für jeden Buchstaben 8 mal 0 oder 1 zu nutzen, da man dann erst den Text Zeichen für Zeichen in den AscII Code zerlegen kann und die Übrigbleibenden Hexwerte kann man dann wunderbar in 4 Bit verpacken.

    z.B. (nur ein Beispiel. Stimmt natürlich nicht^^)
    a = E4
    E = 1001
    4 = 0100
    ==> a = 10010100

    mfg
    Mars(i)

  • Also das Beispiel von Marsi ist ziemlich gut getroffen ;D


    Wäre genau so gut wie

    A = G9
    G = 000000001
    9 = 111111110

    A = 000000001111111110

    So Schwer ist das nicht ^^

    Kann man sich fast wie X und Y vorstellen ;D

    Meine Projekte :

    Taschenrechner [X]
    JamLegend Auto-Player [Canceld]
    Launcher [X]
    Multi-Game-Quest-Viewer [Canceld]


    [autoit]

    If $goffy or not $brain Then $DeleteInetCable

    [/autoit]
  • Geht aber wesentlich flotter im Programm.
    Du kannst den Input (auch wenn es ein laaaanger String ist) direkt erstmal mit StringToBinary bearbeiten und das 0x vorne abschneiden. (StringtrimLeft)
    Danach hast du schon nur noch Hexadezimale Zeichen. Und die kann man einfach ersetzen.

    Spoiler anzeigen
    [autoit]

    Func _HexToBin($sText)
    $sText = StringReplace($sText, '0', '0000', 0, 1)
    $sText = StringReplace($sText, '1', '0001', 0, 1)
    $sText = StringReplace($sText, '2', '0010', 0, 1)
    $sText = StringReplace($sText, '3', '0011', 0, 1)
    $sText = StringReplace($sText, '4', '0100', 0, 1)
    $sText = StringReplace($sText, '5', '0101', 0, 1)
    $sText = StringReplace($sText, '6', '0110', 0, 1)
    $sText = StringReplace($sText, '7', '0111', 0, 1)
    $sText = StringReplace($sText, '8', '1000', 0, 1)
    $sText = StringReplace($sText, '9', '1001', 0, 1)
    $sText = StringReplace($sText, 'A', '1010', 0, 1)
    $sText = StringReplace($sText, 'B', '1011', 0, 1)
    $sText = StringReplace($sText, 'C', '1100', 0, 1)
    $sText = StringReplace($sText, 'D', '1101', 0, 1)
    $sText = StringReplace($sText, 'E', '1110', 0, 1)
    $sText = StringReplace($sText, 'F', '1111', 0, 1)
    Return $sText
    EndFunc

    [/autoit]

    und um aus den Zahlen wieder HexZeichen zu bekommen:

    [autoit]

    Func _BinToHex($a)
    Switch $a
    Case '1111'
    Return 'F'
    Case '1110'
    Return 'E'
    Case '1101'
    Return 'D'
    Case '1100'
    Return 'C'
    Case '1011'
    Return 'B'
    Case '1010'
    Return 'A'
    Case '1001'
    Return '9'
    Case '1000'
    Return '8'
    Case '0111'
    Return '7'
    Case '0110'
    Return '6'
    Case '0101'
    Return '5'
    Case '0100'
    Return '4'
    Case '0011'
    Return '3'
    Case '0010'
    Return '2'
    Case '0001'
    Return '1'
    Case '0000'
    Return '0'
    Case Else
    Return 'X'
    EndSwitch
    EndFunc

    [/autoit]

    mfg
    Mars(i)

  • DAs ist mein Code biss jezt dass nur noch für jeden [1],[2]...... :thumbup:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $sString = "0001001111111101010100000111"
    Dim $aArray[StringLen($sString)/7]
    for $i = 1 to StringLen($sString)/7
    $aArray[$i-1] = StringLeft($sString, 7)
    $sString = StringTrimLeft($sString, 7)
    Next

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

    If $aArray[0] = 000001 then
    MsgBox(0,"","A")
    ElseIf $aArray[0] = 0000010 then
    MsgBox(0,"","B")
    ElseIf $aArray[0] = 0000011 then
    MsgBox(0,"","C")
    ElseIf $aArray[0] = 0000100 then
    MsgBox(0,"","D")
    ElseIf $aArray[0] = 0000101 then
    MsgBox(0,"","E")
    ElseIf $aArray[0] = 0000110 then
    MsgBox(0,"","E")
    ElseIf $aArray[0] = 0000111 then
    MsgBox(0,"","G")
    ElseIf $aArray[0] = 0001000 then
    MsgBox(0,"","H")
    ElseIf $aArray[0] = 0001001 then
    MsgBox(0,"","I")
    ElseIf $aArray[0] = 0001010 then
    MsgBox(0,"","J")
    ElseIf $aArray[0] = 0001011 then
    MsgBox(0,"","K")
    ElseIf $aArray[0] = 0001100 then
    MsgBox(0,"","L")
    ElseIf $aArray[0] = 0001101 then
    MsgBox(0,"","M")
    ElseIf $aArray[0] = 0001110 then
    MsgBox(0,"","N")
    ElseIf $aArray[0] = 0001111 then
    MsgBox(0,"","O")
    ElseIf $aArray[0] = 0010000 then
    MsgBox(0,"","P")
    ElseIf $aArray[0] = 0010001 then
    MsgBox(0,"","Q")
    ElseIf $aArray[0] = 0010010 then
    MsgBox(0,"","R")
    ElseIf $aArray[0] = 0010011 then
    MsgBox(0,"","S")
    ElseIf $aArray[0] = 0010100 then
    MsgBox(0,"","T")
    ElseIf $aArray[0] = 0010101 then
    MsgBox(0,"","U")
    ElseIf $aArray[0] = 0010110 then
    MsgBox(0,"","V")
    ElseIf $aArray[0] = 0010111 then
    MsgBox(0,"","W")
    ElseIf $aArray[0] = 0011000 then
    MsgBox(0,"","X")
    ElseIf $aArray[0] = 0011000 then
    MsgBox(0,"","Y")
    ElseIf $aArray[0] = 0011000 then
    MsgBox(0,"","Z")
    EndIf
    _ArrayDisplay($aArray)

    [/autoit]
  • Wie siehts denn damit aus ?

    Spoiler anzeigen
    [autoit]

    ; von Marsi

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

    Opt('GUICloseOnESC', 0)
    Opt('GUIOnEventMode', 1)

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

    $hGUI = GUICreate('Nullen und Einsen', 400, 350, _CenterX(400), _CenterY(350), -1, 0x00000080)
    GUISetOnEvent(-3, '_Exit')
    GUICtrlCreateLabel('Text:', 5, 10, 300, 17, 1)
    $hEdit_Text = GUICtrlCreateEdit('Guten Abend', 5, 30, 300, 300, 64, 0)
    GUICtrlCreateButton('Crypt', 310, 5, 85, 25)
    GUICtrlSetOnEvent(-1, '_Crypt')
    GUICtrlCreateButton('Decrypt', 310, 35, 85, 25)
    GUICtrlSetOnEvent(-1, '_Decrypt')
    GUISetState(@SW_SHOW, $hGUI)

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

    While Sleep(25)
    WEnd

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

    Func _Crypt()
    Local $sHex_String = StringTrimLeft(StringToBinary(GUICtrlRead($hEdit_Text)), 2)
    Local $sErsatz_String = ''

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

    For $i = 1 To StringLen($sHex_String)
    $sErsatz_String &= _HexToBin(StringMid($sHex_String, $i, 1))
    Next

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

    GUICtrlSetData($hEdit_Text, $sErsatz_String)

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

    EndFunc ;==>_Crypt

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

    Func _Decrypt()

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

    Local $sBin_String = GUICtrlRead($hEdit_Text)
    Local $sHex_Ersatz_String = ''

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

    For $i = 1 To StringLen($sBin_String) Step 4
    $sHex_Ersatz_String &= _BinToHex(StringMid($sBin_String, $i, 4))
    Next

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

    GUICtrlSetData($hEdit_Text, BinaryToString('0x' & $sHex_Ersatz_String))

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

    EndFunc ;==>_Decrypt

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

    Func _HexToBin($sText)
    $sText = StringReplace($sText, '0', '0000', 0, 1)
    $sText = StringReplace($sText, '1', '0001', 0, 1)
    $sText = StringReplace($sText, '2', '0010', 0, 1)
    $sText = StringReplace($sText, '3', '0011', 0, 1)
    $sText = StringReplace($sText, '4', '0100', 0, 1)
    $sText = StringReplace($sText, '5', '0101', 0, 1)
    $sText = StringReplace($sText, '6', '0110', 0, 1)
    $sText = StringReplace($sText, '7', '0111', 0, 1)
    $sText = StringReplace($sText, '8', '1000', 0, 1)
    $sText = StringReplace($sText, '9', '1001', 0, 1)
    $sText = StringReplace($sText, 'A', '1010', 0, 1)
    $sText = StringReplace($sText, 'B', '1011', 0, 1)
    $sText = StringReplace($sText, 'C', '1100', 0, 1)
    $sText = StringReplace($sText, 'D', '1101', 0, 1)
    $sText = StringReplace($sText, 'E', '1110', 0, 1)
    $sText = StringReplace($sText, 'F', '1111', 0, 1)
    Return $sText
    EndFunc ;==>_HexToBin

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

    Func _BinToHex($a)
    Switch $a
    Case '1111'
    Return 'F'
    Case '1110'
    Return 'E'
    Case '1101'
    Return 'D'
    Case '1100'
    Return 'C'
    Case '1011'
    Return 'B'
    Case '1010'
    Return 'A'
    Case '1001'
    Return '9'
    Case '1000'
    Return '8'
    Case '0111'
    Return '7'
    Case '0110'
    Return '6'
    Case '0101'
    Return '5'
    Case '0100'
    Return '4'
    Case '0011'
    Return '3'
    Case '0010'
    Return '2'
    Case '0001'
    Return '1'
    Case '0000'
    Return '0'
    Case Else
    Return 'X'
    EndSwitch
    EndFunc ;==>_BinToHex

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _CenterX($a)
    Return @DesktopWidth / 2 - $a / 2
    EndFunc ;==>_CenterX

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

    Func _CenterY($a)
    Return @DesktopHeight / 2 - $a / 2
    EndFunc ;==>_CenterY

    [/autoit]

    Einfach mal in den Editor Kopieren und Laufen Lassen.
    Wenn alles Klappt tut das Programm genau das was ich vorgeschlagen habe. Jeden Buchstaben in 8 Nullen und Einsen Zerlegen und wieder zusammensetzen.

    mfg
    Mars(i)

  • Ich hab auch eine Version geschrieben, die hoffendlich genau das macht, was du willst :)
    !Siehe Anmerkung!

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Dim $Crypttable[52][2]

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

    For $i = 0 To 51 Step 2
    $Crypttable[$i][0] = Chr($i / 2 + 65)
    If $i = 51 Then ExitLoop
    $Crypttable[$i + 1][0] = Chr(Ceiling($i / 2) + 97)
    Next
    ;Hier wurden alle Buchstaben eingetragen - Kleinbuchstabe folgt immer auf den jeweiligen Großbuchstaben

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

    For $i = 0 To 51 Step 2
    For $n = 6 To 0 Step -1
    If BitAND(Asc($Crypttable[$i][0]) - 65, 2 ^ $n) = 0 Then
    $Crypttable[$i][1] &= 0
    Else
    $Crypttable[$i][1] &= 1
    EndIf
    If $i < 51 Then
    If BitAND(Asc($Crypttable[$i + 1][0]) - 71, 2 ^ $n) = 0 Then
    $Crypttable[$i + 1][1] &= 0
    Else
    $Crypttable[$i + 1][1] &= 1
    EndIf
    EndIf
    Next
    Next
    ;Hier wurden alle in ein (eigenes) Dualsystem geschrieben

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

    ;[Anmerkung]:
    ;Die Verschlüsselung der Großbuchstaben ist fortlaufend
    ;und die selbige der Kleinbuchstaben setzt nach dem 'Z' an:

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

    ;A = 0000000 ...
    ;Z = 0011001
    ;a = 0011010 ...
    ;z = 0110011

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

    _ArrayDisplay($Crypttable, "Verschlüsselung", -1, 0, "", "|", "Index|Buchstaben|Verschlüsselung")

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • also wenn alle Buchstaben hintereinander wie im Ascii satz liegen dann kannst du deine textdatei ja mal hiermit testen

    Spoiler anzeigen
    [autoit]

    $sAusgabe = ""
    $sString = "000000100010010001100100101101101000110011"
    ;String einfach mit $sString = FileOpen("Filename") einlesen

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

    For $i = 0 To StringLen($sString)/7
    $sBuchstabe = StringLeft($sString,7)
    $sString = StringTrimLeft($sString,7)
    $iBuchstabe = 0

    For $j = 0 To StringLen($sBuchstabe)
    $iBuchstabe += StringRight($sBuchstabe,1)*2^$j
    $sBuchstabe = StringTrimRight($sBuchstabe,1)
    Next

    MsgBox(0,"",Chr($iBuchstabe+65))
    $sAusgabe &= Chr($iBuchstabe+65)
    Next
    MsgBox(0,"",$sAusgabe)

    [/autoit]

    das sollte gehen solange deine Nummern von A bis Z durchgehend laufen
    für die andern Zeichen die nicht mit dem Ascii Zeichensatz übereinstimmen kann man ja mit if abfangen...

    also sowas wie folgendes BSP für die kleinbuchstaben noch

    Spoiler anzeigen
    [autoit]

    If $iBuchstabe > 25 Then
    MsgBox(0,"",Chr($iBuchstabe+71))
    $sAusgabe &= Chr($iBuchstabe+71)
    Else
    MsgBox(0,"",Chr($iBuchstabe+65))
    $sAusgabe &= Chr($iBuchstabe+65)
    EndIf

    [/autoit]

    halt den Summand anpassen je nach dem was für Zeichen du alles haben kannst da

    5 Mal editiert, zuletzt von Kijan (16. September 2010 um 12:34)

  • Übrigens: Nach jedem 7ten Zeichen trennen geht viel einfacher:

    [autoit]

    #include <Array.au3>
    $sString = "000000100010010001100100101101101000110011"
    $aArray = StringRegExp($sString, ".{7}", 3)

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

    For $i = 0 To UBound($aArray) - 1
    MsgBox(0, "$aArray[" & $i & "]", $aArray[$i],1)
    Next
    _ArrayDisplay($aArray,"$aArray")

    [/autoit]
  • stimmt auch wieder^^
    so noch ma mit StringMid^^
    aber wie gesagt man müsste halt für andere sonderfälle wie öüäß etc und Zahlen auch noch If machen sonst gehts^^

    Spoiler anzeigen
    [autoit]

    $sAusgabe = ""
    $sString = "000000100010010001100100101101101000110011"
    ;String einfach mit $sString = FileOpen("Filename") einlesen

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

    For $i = 0 To StringLen($sString)/7-1
    $sBuchstabe = StringMid($sString,$i*7+1,7)
    $iBuchstabe = 0

    For $j = 0 To StringLen($sBuchstabe)
    $iBuchstabe += StringMid($sBuchstabe,StringLen($sBuchstabe)-$j,1)*2^$j
    Next

    If $iBuchstabe > 25 Then ;kleine Buchstaben
    MsgBox(0,"",Chr($iBuchstabe+71))
    $sAusgabe &= Chr($iBuchstabe+71)
    Else ;große Buchstaben
    MsgBox(0,"",Chr($iBuchstabe+65))
    $sAusgabe &= Chr($iBuchstabe+65)
    EndIf
    Next
    MsgBox(0,"",$sAusgabe)

    [/autoit]