Übersetzer

  • Hoi Leuts ich ich bin dabei einen Übersetzer zu machen und zwar nicht wort für wort sondern Buchstabe zu Buchstabe
    Also man gibt links "abc" ein und bekommt links (jeweils in inputboxen) "bcd" raus!! Also a-->b b-->c c-->d usw!
    Wenn jemand eine Methode hat wie man das mschen könnte ......!!!

  • Hey
    Gucke http://de.wikipedia.org/wiki/Caesar-Verschlüsselung

    Ich hatte mal eine Funktion gebastelt (ist sehr alt):

    Spoiler anzeigen
    [autoit]


    #include <array.au3>
    Func _StringToArray($string)
    $z=StringLen($string)
    If $z=0 Then
    Dim $array[1]
    Else
    Dim $array[$z]
    For $i=1 To $z
    $array[$i-1]=StringTrimRight($string,$z-$i)
    $array[$i-1]=StringTrimLeft($array[$i-1],$i-1)
    Next
    EndIf
    Return $array
    EndFunc

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

    Func _ArrayToString2($array,$split="")
    $z=UBound($array)
    $string=""
    For $i=0 To $z-1
    $string&=$array[$i]&$split
    Next
    If StringLen($split)>0 Then $string=StringTrimRight($string,StringLen($split))
    Return $string
    EndFunc

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

    Func _Caesar($string,$encrypt=True)
    Dim $abc[26]=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
    Dim $abcB[26]=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
    Dim $num[10]=["1","2","3","4","5","6","7","8","9","0"]
    $array=_StringToArray($string)
    Dim $narray[UBound($array)]
    Switch $encrypt
    Case True
    For $i=0 To UBound($array)-1
    For $e=0 To UBound($abc)-1
    If $array[$i]==$abc[$e] then
    $temp=_ArrayShiftByString($abc,$array[$i])
    $narray[$i]=$temp[1]
    EndIf
    Next
    For $o=0 To UBound($abcB)-1
    If $array[$i]==$abcB[$o] then
    $temp=_ArrayShiftByString($abcB,$array[$i])
    $narray[$i]=$temp[1]
    EndIf
    Next
    For $f=0 To UBound($num)-1
    If $array[$i]=$num[$f] Then
    $temp=_ArrayShiftByString($num,$array[$i])
    $narray[$i]=$temp[1]
    EndIf
    Next
    Next
    Case False
    For $i=0 To UBound($array)-1
    For $e=0 To UBound($abc)-1
    If $array[$i]==$abc[$e] then
    $temp=_ArrayShiftByString($abc,$array[$i])
    $temp=_ArrayShiftRigth($temp)
    $narray[$i]=$temp[0]
    EndIf
    Next
    For $o=0 To UBound($abcB)-1
    If $array[$i]==$abcB[$o] then
    $temp=_ArrayShiftByString($abcB,$array[$i])
    $temp=_ArrayShiftRigth($temp)
    $narray[$i]=$temp[0]
    EndIf
    Next
    For $f=0 To UBound($num)-1
    If $array[$i]=$num[$f] Then
    $temp=_ArrayShiftByString($num,$array[$i])
    $temp=_ArrayShiftRigth($temp)
    $narray[$i]=$temp[0]
    EndIf
    Next
    Next
    EndSwitch
    Return _ArrayToString2($narray)
    EndFunc

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

    Func _ArrayShiftLeft($array)
    $z=UBound($array)
    Dim $return[$z]
    For $i=0 To $z-1
    If $i-1<0 Then
    $u=$z-1
    Else
    $u=$i-1
    EndIf
    $return[$u]=$array[$i]
    Next
    Return $return
    EndFunc

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

    Func _ArrayShiftRigth($array)
    $z=UBound($array)
    Dim $return[$z]
    For $i=0 To $z-1
    If $i+1>$z-1 Then
    $u=0
    Else
    $u=$i+1
    EndIf
    $return[$u]=$array[$i]
    Next
    Return $return
    EndFunc

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

    Func _ArrayShiftByString($array,$func)
    Dim $return[1]=[""]
    _ArraySort($array)
    For $i=0 To UBound($array)-1
    $array=_ArrayShiftLeft($array)
    If $array[0]=$func Then $return=$array
    Next
    Return $return
    EndFunc

    [/autoit]


    Das Schlüsselwort für die Caesarverschlüsslung ist ArrayShift.
    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug

  • [autoit]

    Func _CharShift($sTest)
    Local $iAsc, $sReturn, $aTest, $i
    If Not IsString($sTest) Then Return SetError(1, 0, -1)
    $aTest = StringSplit($sTest, "")
    For $i = 1 To $aTest[0]
    $iAsc = Asc($aTest[$i])
    Switch $iAsc
    Case 122
    $iAsc = 97
    Case 90
    $iAsc = 65
    Case 57
    $iAsc = 48
    Case Else
    $iAsc += 1
    EndSwitch
    $sReturn &= Chr($iAsc)
    Next
    Return $sReturn
    EndFunc

    [/autoit]

    Antispeed ziemlich umständlich?

  • @Pinguin94,

    hast du schon einmal probiert mit deiner Methode einen Text der einen Link enthalt zu ver- und auch wieder zu entschlüsseln? z.B.:

    Code
    Hier ist eine tolle Implentierund des Cäsar-Chiffres http://www.autoit.de/index.php?page=Thread&postID=196455#post196455 muss leider noch etwas angepasst werden

    Ich glabe du hast des Meister des Schlüssels ( Andy vergessen) Stichwort Steganographie) er versteckt in sogar noch,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (17. November 2010 um 22:06)

  • @Pinguin94,

    hast du schon einmal probiert mit deiner Methode einen Text der einen Link enthalt zu ver- und auch wieder zu entschlüsseln? z.B.:

    Code
    Hier ist eine tolle Implentierund des Cäsar-Chiffres http://www.autoit.de/index.php?page=Thread&postID=196455#post196455 muss leider noch etwas angepasst werden

    Ich glabe du hast des Meister des Schlüssels ( Andy vergessen) Stichwort Steganographie) er versteckt in sogar noch,

    mfg autoBert

    Ich versteh deinen 2. Teil des Satzes nicht 8|

    EDIT:
    Wenn du Sonderzeichen verwenden willst, darfst du nicht von Z auf A und von z auf a und von 9 auf 0 springen.

    Hier mal die funktion mit Decryption:

    [autoit]

    Func _CharShift($sTest, $bState)
    Local $iAsc, $sReturn, $aTest, $i
    If Not IsString($sTest) Then Return SetError(1, 0, -1)
    $aTest = StringSplit($sTest, "")
    For $i = 1 To $aTest[0]
    $iAsc = Asc($aTest[$i])
    Switch $bState
    Case True
    Switch $iAsc
    Case 122
    $iAsc = 97
    Case 90
    $iAsc = 65
    Case 57
    $iAsc = 48
    Case Else
    $iAsc += 1
    EndSwitch
    Case False
    Switch $iAsc
    Case 97
    $iAsc = 122
    Case 65
    $iAsc = 90
    Case 48
    $iAsc = 57
    Case Else
    $iAsc -= 1
    EndSwitch
    EndSwitch
    $sReturn &= Chr($iAsc)
    Next
    Return $sReturn
    EndFunc

    [/autoit]
  • @Pingin94,

    lass mal dieses Testskript laufen:

    [autoit]

    $sText ="Hier ist eine tolle Implentierund des Cäsar-Chiffres http://www.autoit.de/index.php?page…6455#post196455 muss leider noch etwas angepasst werden"
    $sCrypted = _CharShift($sText,True)
    $sDeCrypted = _CharShift($sCrypted,False)
    ConsoleWrite($sText & @CRLF)
    ConsoleWrite($sDeCrypted & @CRLF)

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

    if $sDeCrypted = $sText Then
    MsgBox(0,"Bravo","Klappt")
    Else
    MsgBox(0,"Soryy","Klappt nicht")
    EndIf

    [/autoit]

    schau danach in die Console und du vertsehst warum ich gefragt habe ob du es schon versucht hast.

    Ps.: Die eigentliche Botschaft liegt im Teststring,

    mfg autoBert

  • Hi!

    Eine einfache und sichere Veschlüsselung! ;)

    Spoiler anzeigen
    [autoit]

    Dim $Te = VerEnd_S('Hier ist eine tolle Implentierund des Cäsar-Chiffres http://www.autoit.de/index.php?page…6455#post196455 muss leider noch etwas angepasst werden')
    ConsoleWrite($Te & @CRLF)
    ConsoleWrite(@CRLF & @CRLF)
    Dim $Te_ = VerEnd_S($Te)
    ConsoleWrite($Te_ & @CRLF)
    ;===================================================================================================================================#
    ;~ Function Name......: VerEnd_S($sEncDec, $sPass)
    ;~ Description........: Verschlüsselung von String´s
    ;
    ;~ $sEncDec...........: String der Verschlüsselt werden soll
    ;~ $sPass.............: Verslüsselung metode ( Passwor ) kann leer gelassen werden
    ;
    ;~ Return Value(s)....: Erfolg String mit der Verschlüsslung
    ;
    ;~ Author(s).........: Kleiner (http://www.autoit.de)
    ;====================================================================================================================================#
    Func VerEnd_S($sEncDec, $sPass = '')
    If Not $sPass Then $sPass = 'abcdefghijklmnopqrstuvwxyz'
    Local $iEncDec, $iPass, $UB, $UB_1, $UB_2
    $UB = StringLen($sEncDec)
    $UB_1 = StringLen($sPass)
    For $i = 1 To $UB_1
    $iPass &= StringMid($sPass, $i, 1) & Asc(StringMid($sPass, $i, 1)) & Chr(122 - $i)
    Next
    $sPass = ''
    $UB_2 = Round($UB / StringLen($iPass)) + 1
    For $i = 0 To $UB_2
    $sPass &= $iPass
    Next
    For $i = 1 To $UB
    $iEncDec &= Chr(BitXOR(Asc(StringMid($sEncDec, $i, 1)), Asc(StringMid($sPass, $i, 1))))
    Next
    Return $iEncDec
    EndFunc ;==>VerEnd_S

    [/autoit]

    Lg Kleiner

  • Hallo Kleiner,

    ich hab es so getestet:

    [autoit]

    $sText ="Hier ist eine tolle Implentierung des Cäsar-Chiffres http://www.autoit.de/index.php?page…6455#post196455 ist perfekt"
    Dim $Te = VerEnd_S($sText)
    Dim $Te_ = VerEnd_S($Te)
    ConsoleWrite("Ursprung: " & $sText & @CRLF)
    ConsoleWrite("verschlüsselt: " & $Te & @CRLF)
    ConsoleWrite(@CRLF & @CRLF)
    ConsoleWrite("entschlüsselt: " & $Te_ & @CRLF)
    if $Te_ = $sText Then
    MsgBox(0,"Bravo","Klappt")
    Else
    MsgBox(0,"Sorry","Klappt nicht")
    EndIf

    [/autoit]

    hat geklappt. Ausgabe Scite-Konsole:

    Code
    Ursprung:      Hier ist eine tolle Implentierund des Cäsar-Chiffres http://www.autoit.de/index.php?page=Thread&postID=196455#post196455 ist perfekt
    verschlüsselt: )PRBPKC\PD_    Tx]U\
    
    
    entschlüsselt: Hier ist eine tolle Implentierund des Cäsar-Chiffres http://www.autoit.de/index.php?page=Thread&postID=196455#post196455 ist perfekt

    bei der sehr kurzen Länge des verschlüsselten Strings (sieht in der Konsole anders aus) dachte ich zuerst du hättest einen Packer geschreiben. Daraufhin habe ich mit _InetGetSource einen AutoIt-Thread eingegelesen. Verschlüsseln/entschlüsseln hat auch wieder geklappt, das anschliessende Schreiben in eine Datei hat mich mir dann gezeigt dass deine Daten und die Ursprungsdaten exakt den selben Plattenplatz benötigen.

    mfg autoBert

  • Kleiner: Kannst du mir in etwa sagen wie deine Methode funktioniert?

    Hab noch einen Fehler entdeckt. Beginnt der zu verschlüsselnde Text mit einem a, bekommt man eine Leerstring zurück.
    Dann noch etwas.
    So teste ich es:

    [autoit]

    Global $Te = VerEnd_S("sdfb", "")
    ConsoleWrite("Verschlüsselt: " & $Te & @CRLF & @CRLF)
    Global $Te_ = VerEnd_S($Te, "")
    ConsoleWrite("Entschlüsselt: " & $Te_ & @CRLF)

    [/autoit]


    Kommt raus:

    Code
    Verschlüsselt: ]Q
    
    
    Entschlüsselt: sdfb


    Das ist ja noch alles in Ordnung.
    Aber füge ich noch ein b dahinter an.

    [autoit]

    Global $Te = VerEnd_S("sdfbb", "")
    ConsoleWrite("Verschlüsselt: " & $Te & @CRLF & @CRLF)
    Global $Te_ = VerEnd_S($Te, "")
    ConsoleWrite("Entschlüsselt: " & $Te_ & @CRLF)

    [/autoit]


    Kommt das raus:

    Code
    Verschlüsselt: ]QEntschlüsselt: sdfbb


    Also ohne jegliche @CRLF.

    WARUM???

    3 Mal editiert, zuletzt von m-obi (18. November 2010 um 04:58)

  • Hallo m-obi,

    hier die Grundlage:

    Zitat von Quelle wikipedia

    Involutorische Chiffren [Bearbeiten]

    Involutorische Chiffren weisen die Eigenart auf, dass der Algorithmus zum Verschlüsseln und zum Entschlüsseln identisch ist. Sie sind damit besonders bequem zu handhaben. Ein einfaches Beispiel aus der Kryptologie ist die Verschiebechiffre ROT13, bei der zur Verschlüsselung jeder Buchstabe um den um 13 Stellen im Alphabet verschobenen Buchstaben ersetzt wird. Die zweimalige Anwendung dieser Methode ergibt eine Verschiebung um 26 Buchstaben und damit wieder den ursprünglichen Klartext. In der Geschichte gab es aber auch wesentlich komplexere involutorische Verschlüsselungsverfahren. Das wohl bekannteste Beispiel ist die deutsche Verschlüsselungsmaschine ENIGMA, die im Zweiten Weltkrieg im Nachrichtenverkehr des deutschen Militärs verwendet wurde.

    Die logische Funktion Exklusives Oder ist ebenfalls selbstinvers und wird daher unter anderem in Verschlüsselungsalgorithmen wie One Time Pad eingesetzt.

    Edit: kannst du bitte ein Wort/Satz nennen, das nicht mehr entschlüsselt werden konnte, alle meine Versuche haben geklappt,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (18. November 2010 um 05:47)

  • Hab mal deins genommen zum Testen.

    [autoit]

    $sText ="allen Affen gehts gut"
    Dim $Te = VerEnd_S($sText)
    Dim $Te_ = VerEnd_S($Te)
    ConsoleWrite("Ursprung: " & $sText & @CRLF)
    ConsoleWrite("verschlüsselt: " & $Te & @CRLF)
    ConsoleWrite(@CRLF & @CRLF)
    ConsoleWrite("entschlüsselt: " & $Te_ & @CRLF)
    If $Te_ = $sText Then
    MsgBox(0,"Bravo","Klappt")
    Else
    MsgBox(0,"Sorry","Klappt nicht")
    EndIf

    [/autoit]

    Konsolenausgabe:

    Code
    Ursprung:      allen Affen gehts gut
    verschlüsselt: 
    
    
    entschlüsselt: allen Affen gehts gut

    Aber er muss ja irgendwas verschlüsselt haben. Sonst würde ja auch Entschlüsseln nicht klappen.

  • Hi!

    Diese Methode nennt man Vernam Verschlüsselung von (Gilbert Sandford Vernam)!
    Es werden in mein Beispiel alle ASCII-Zeichensätze angewandt das heißt dass, Tabulator Zeichen Verwendet werden darum in der Konsole nicht all so viel zu Sehne ist Schreib die Ausgabe in einer Datei und Interpretiere die Datei mit Verschiedene Editoren.

    Zitat aus Wiki: Der Spezialfall, dass der Schlüssel genauso lang ist wie der zu verschlüsselnde Text, heißt Vernam-Verschlüsselung, wobei der Schlüssel XOR mit dem Klartext verknüpft wird. Handelt es sich bei dem Schlüssel um eine zufällige Folge von Buchstaben, und wird der Schlüssel nur ein einziges Mal verwendet, nennt man das Verfahren auch One-Time-Pad. Bei diesem ist eine Dechiffrierung ohne Kenntnis des korrekten Schlüssels absolut unmöglich.

    Lg Kleiner

  • autoBert:
    Hab die Funktionmal ein wenig umgeschrieben:

    [autoit]

    Func _CharShift($sTest, $bEncrypt)
    Local $iAsc, $sReturn, $aTest, $i
    If Not IsString($sTest) Then Return SetError(1, 0, -1)
    $aTest = StringSplit($sTest, "")
    Switch $bEncrypt
    Case True
    For $i = 1 To $aTest[0]
    $sReturn &= Chr((Asc($aTest[$i])) + 1)
    Next
    Case False
    For $i = 1 To $aTest[0]
    $sReturn &= Chr((Asc($aTest[$i])) - 1)
    Next
    EndSwitch
    Return $sReturn
    EndFunc

    [/autoit]