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 ......!!!
Übersetzer
-
- [ offen ]
-
WOnder -
17. November 2010 um 19:51 -
Geschlossen -
Erledigt
-
-
Sinn dieser Übung?
MfG
Der_Doc -
Code entschlüsseln......
-
Hey
Gucke http://de.wikipedia.org/wiki/Caesar-VerschlüsselungIch hatte mal eine Funktion gebastelt (ist sehr alt):
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [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
EndFuncFunc _ArrayToString2($array,$split="")
[/autoit] [autoit][/autoit] [autoit]
$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
EndFuncFunc _Caesar($string,$encrypt=True)
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _ArrayShiftLeft($array)
[/autoit] [autoit][/autoit] [autoit]
$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
EndFuncFunc _ArrayShiftRigth($array)
[/autoit] [autoit][/autoit] [autoit]
$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
EndFuncFunc _ArrayShiftByString($array,$func)
[/autoit]
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
Das Schlüsselwort für die Caesarverschlüsslung ist ArrayShift.
MfG AntiSpeed -
[autoit]
Func _CharShift($sTest)
[/autoit]
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
EndFuncAntispeed ziemlich umständlich?
-
Ok funzt beides danke Leute!!!!
-
Pinguin:
Wie gesagt ist sehr alt, da war ich noch nicht so erfahren . Jetzt weiß ich ja wies die Profis machen . -
Jetzt weiß ich ja wies die Profis machen .
Du meinst doch jetzt nicht mich damit oder?
Du meinst allgemein alle wie BugFix Seubo Schnuffel etc?! -
@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.:
CodeHier 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
-
@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.:
CodeHier 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
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)
[/autoit]
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 -
@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"
[/autoit][autoit][/autoit][autoit]
$sCrypted = _CharShift($sText,True)
$sDeCrypted = _CharShift($sCrypted,False)
ConsoleWrite($sText & @CRLF)
ConsoleWrite($sDeCrypted & @CRLF)if $sDeCrypted = $sText Then
[/autoit]
MsgBox(0,"Bravo","Klappt")
Else
MsgBox(0,"Soryy","Klappt nicht")
EndIfschau 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')
[/autoit]
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_SLg 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"
[/autoit]
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")
EndIfhat geklappt. Ausgabe Scite-Konsole:
CodeUrsprung: 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.
[autoit]
Dann noch etwas.
So teste ich es:Global $Te = VerEnd_S("sdfb", "")
[/autoit]
ConsoleWrite("Verschlüsselt: " & $Te & @CRLF & @CRLF)
Global $Te_ = VerEnd_S($Te, "")
ConsoleWrite("Entschlüsselt: " & $Te_ & @CRLF)
Kommt raus:
[autoit]
Das ist ja noch alles in Ordnung.
Aber füge ich noch ein b dahinter an.Global $Te = VerEnd_S("sdfbb", "")
[/autoit]
ConsoleWrite("Verschlüsselt: " & $Te & @CRLF & @CRLF)
Global $Te_ = VerEnd_S($Te, "")
ConsoleWrite("Entschlüsselt: " & $Te_ & @CRLF)
Kommt das raus:
Also ohne jegliche @CRLF.WARUM???
-
Hallo m-obi,
hier die Grundlage:
Zitat von Quelle wikipediaInvolutorische 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
-
Hab mal deins genommen zum Testen.
[autoit]$sText ="allen Affen gehts gut"
[/autoit]
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")
EndIfKonsolenausgabe:
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:
[autoit]
Hab die Funktionmal ein wenig umgeschrieben:Func _CharShift($sTest, $bEncrypt)
[/autoit]
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