Caesar- und Vignèrechiffren

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

DaysShadow

Betreff: Caesar- und Vignèrechiffren

BeitragDo, Jul 23, 2009 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax: [AUSKLAPPEN]
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]
SuperStrict

Include "VigenereCypher.bmx"

Graphics 300, 300, 0, 60

Global CaesarEncrypted:String, VigenereEncrypted:String
Global CaesarDecrypted:String, VigenereDecrypted:String

'Benutzt die Beispiele von http://de.wikipedia.org/wiki/Verschiebechiffre und http://de.wikipedia.org/wiki/Polyalphabetische_Substitution

CaesarEncrypted = EncryptCaesarCypher("caesar", "C")
VigenereEncrypted = EncryptVigenereCypher("geheimnis", "AKEY", False) ' False für autokey

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ß Wink

MfG DaysShadow
Blessed is the mind too small for doubt

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group