Einzelnen Beitrag anzeigen
Alt 12.01.07, 10:10   #28 (permalink)
Ivan Dolvich
 
Registriert seit: 12.01.07
Ivan Dolvich Leistung: Facit NTK
Likes: 0
Standard RE: kleines Verschlüsselungsprogramm

Hi Hackers, hier ist meine Lösung für Caesar und Vigenere, powered by Groovy :-)

Code:
// ***** Caesar *****

String encodeCaesar(String text)
{
    return caesar(text, "A", "Z", { it.next() })    
}

String decodeCaesar(String text)
{
    return caesar(text, "Z", "A", { it.previous() })    
}

String caesar(String text, String START, String END, Closure move)
{
    return text.replaceAll("[A-Z]") { c -> 
        3.times {
            c = (c != END) ? move(c) : START
        }
        return c 
    }
}

println encodeCaesar("ABCZ")     // "DEFC"
println decodeCaesar("DEFC")     // "ABCZ"

// ***** Vigenere *****

charRange = "A".."Z"

String encodeVigenere(String text, String key)
{
    return vigenere(text, key, "A", "Z", { it.next() })
}

String decodeVigenere(String text, String key)
{
    return vigenere(text, key, "Z", "A", { it.previous() })
}

String vigenere(String text, String key, String START, String END, Closure move)
{
    char[] result = new char[text.size()]
    keySize = key.size()
    text.eachWithIndex { c, i ->
        keyChar = key[i % keySize]
        shift = charRange.indexOf(keyChar)
        shift.times {
            c = (c != END) ? move(c) : START
        }
        result[i] = c
    }
    return new String(result)
}

println encodeVigenere("GEHEIMNIS", "AKEY")  // "GOLCIWRGS"
println decodeVigenere("GOLCIWRGS", "AKEY")  // "GEHEIMNIS"
Ivan Dolvich ist offline   Mit Zitat antworten
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61