AutoIt
Global $iStruct = 1024
Global $tStruct = DllStructCreate("byte[" & $iStruct & "]")
Func _CypherEnigma($sString, $nKlein, $nGross, $nSonder, $nExtra)
Local $Return = "", $iASC, $iS2, $iS3
Local $bBin = StringToBinary($sString)
If BinaryLen($bBin) > $iStruct Then
$iStruct = BinaryLen($bBin)
$tStruct = DllStructCreate("byte[" & $iStruct & "]")
EndIf
DllStructSetData($tStruct, 1, $bBin)
$nKlein -= 97
$nGross -= 65
$nSonder -= 32
$iS2 = $nSonder - 26
$iS3 = $nSonder - 52
Switch $nExtra
Case 0
For $i = 1 To BinaryLen($bBin)
$iASC = DllStructGetData($tStruct, 1, $i)
Switch $iASC
Case 97 To 122
$iASC = Mod($iASC + $nKlein, 26) + 97
Case 65 To 90
$iASC = Mod($iASC + $nGross, 26) + 65
Case 32 To 64
$iASC = Mod($iASC + $nSonder, 43) + 32
Switch $iASC
Case 65 To 70
$iASC += 26
Case 71 To 74
$iASC += 52
EndSwitch
Case 91 To 96
$iASC = Mod($iASC + $iS2, 43) + 32
Switch $iASC
Case 65 To 70
$iASC += 26
Case 71 To 74
$iASC += 52
EndSwitch
Case 123 To 126
$iASC = Mod($iASC + $iS3, 43) + 32
Switch $iASC
Case 65 To 70
$iASC += 26
Case 71 To 74
$iASC += 52
EndSwitch
EndSwitch
$Return &= Chr($iASC)
Next
Case Else
For $i = 1 To BinaryLen($bBin)
$iASC = DllStructGetData($tStruct, 1, $i)
Switch $iASC
Case 97 To 122
$iASC = Mod($iASC + $nKlein + $nExtra * $i, 26) + 97
Case 65 To 90
$iASC = Mod($iASC + $nGross + $nExtra * $i, 26) + 65
Case 32 To 64
$iASC = Mod($iASC + $nSonder + $nExtra * $i, 43) + 32
Switch $iASC
Case 65 To 70
$iASC += 26
Case 71 To 74
$iASC += 52
EndSwitch
Case 91 To 96
$iASC = Mod($iASC + $iS2 + $nExtra * $i, 43) + 32
Switch $iASC
Case 65 To 70
$iASC += 26
Case 71 To 74
$iASC += 52
EndSwitch
Case 123 To 126
$iASC = Mod($iASC + $iS3 + $nExtra * $i, 43) + 32
Switch $iASC
Case 65 To 70
$iASC += 26
Case 71 To 74
$iASC += 52
EndSwitch
EndSwitch
$Return &= Chr($iASC)
Next
EndSwitch
Return $Return
EndFunc ;==>_CypherEnigma
Alles anzeigen