Page 1 of 1

Didactic Feedback Cipher 2

Posted: Sun Mar 23, 2014 11:22 am
by Grusewolf
I solved it in groovy.
For the key k, it seems, that there is no way to calculate it and so the 1st plaintext byte (plain[0]) can just be guessed. Of course in this case, the first plain byte was not needed and guessing it after resolving was easy.

Code: Select all

def cipherString = '310a7718781f73...'
def cipher = string2List(cipherString)
(0..255).each {key->
    printAscii(decrypt(cipher, key))
}

def decrypt(cipher, key) {
    def plain = new byte[cipher.size()]

    for(i in (cipher.size()-1..<0)) {
        byte roundKey = (cipher[i-1] + key) % 0x100
        plain[i] = cipher[i] ^ roundKey
    }
    plain[0] = 32
    return plain
}

def string2List(String hexString) {
    def list = []
    for (index = 0; index < hexString.size() - 1; index += 2) {
        list += Integer.parseInt(hexString[index..index + 1], 16)
    }
    return list
}

def printAscii(list){
    println list.collect{(char) it}.join()
}