BlitzMax: [AUSKLAPPEN] [EINKLAPPEN] Function EncryptCaesarCypher:String(text:String, key:String, vigenere:Int = False) Local keyAlphabet:Int[26], posKey:Int Local encrypted:String key = key.ToLower() posKey = (Asc(key) - 97) Mod 25
For Local i:Int = 0 To 25 keyAlphabet[i] = i + posKey If keyAlphabet[i] > 25 keyAlphabet[i]:- 26 Next text = (text.Replace(" ", "") ).ToLower() For Local i:Int = 1 To text.length If vigenere encrypted:+ Chr(keyAlphabet[Asc(Mid(text, i, 1) ) - 97] + 97 ) Else If Not vigenere encrypted:+ Chr(keyAlphabet[Asc(Mid(text, i, 1) ) - 96] + 97 ) End If Next Return encrypted End Function
Function DecryptCaesarCypher:String(text:String, key:String, vigenere:Int = False) Local keyAlphabet:Int[26], posKey:Int Local decrypted:String key = key.ToLower() posKey = (Asc(key) - 97) Mod 25 For Local i:Int = 0 To 25 keyAlphabet[i] = i - posKey If keyAlphabet[i] < 0 keyAlphabet[i]:+ 26 Next text = (text.Replace(" ", "") ).ToLower() For Local i:Int = 1 To text.length
If vigenere decrypted:+ Chr(keyAlphabet[Asc(Mid(text, i, 1) ) - 96] + 96 ) Else If Not vigenere decrypted:+ Chr(keyAlphabet[Asc(Mid(text, i, 1) ) - 97] + 96 ) End If Next Return decrypted End Function
Function EncryptVigenereCypher:String(text:String, key:String, autokey:Int) Local textKey:String Local encrypted:String If autokey textKey:+ key + Mid(text, 1, text.length - key.length) Else If Not autokey For Local i:Int = 1 To (text.length / key.length) textKey:+ key Next textKey:+ Mid(key, 1, text.length Mod key.length) End If For Local i:Int = 1 To text.length encrypted:+ EncryptCaesarCypher(Mid(text, i, 1), Mid(textKey, i, 1), True) Next Return encrypted End Function
Function DecryptVigenereCypher:String(text:String, key:String) Local textKey:String Local decrypted:String For Local i:Int = 1 To (text.length / key.length) textKey:+ key Next textKey:+ Mid(key, 1, text.length Mod key.length) For Local i:Int = 1 To text.length decrypted:+ DecryptCaesarCypher(Mid(text, i, 1), Mid(textKey, i, 1), True) Next Return decrypted
End Function
Beispiel:
BlitzMax: [AUSKLAPPEN] [EINKLAPPEN] SuperStrict
Include "VigenereCypher.bmx"
Graphics 300, 300, 0, 60
Global CaesarEncrypted:String, VigenereEncrypted:String Global CaesarDecrypted:String, VigenereDecrypted:String
CaesarEncrypted = EncryptCaesarCypher("caesar", "C") VigenereEncrypted = EncryptVigenereCypher("geheimnis", "AKEY", False)
CaesarDecrypted = DecryptCaesarCypher(CaesarEncrypted, "C") VigenereDecrypted = DecryptVigenereCypher(VigenereEncrypted, "AKEY")
Repeat Cls DrawText "Caesar ver- und entschluesselt:", 10, 100 DrawText CaesarEncrypted, 10, 120 DrawText CaesarDecrypted, 10, 140 DrawText "Vigenere ver- und entschluesselt:", 10, 200 DrawText VigenereEncrypted, 10, 220 DrawText VigenereDecrypted, 10, 240 Flip Until KeyHit(KEY_ESCAPE)
Wer es braucht, viel Spaß
MfG DaysShadow
|