<?
    $cal_map = array(
        'a' => 1,
        'b' => 2,
        'c' => 3,
        'd' => 4,
        'e' => 5,
        'f' => 6,
        'g' => 7,
        'h' => 8,
        'i' => 9,
        'j' => 10,
        'k' => 11,
        'l' => 12,
        'm' => 13,
        'n' => 14,
        'o' => 15,
        'p' => 16,
        'q' => 17,
        'r' => 18,
        's' => 19,
        't' => 20,
        'u' => 21,
        'v' => 22,
        'w' => 23,
        'x' => 24,
        'y' => 25,
        'z' => 26,
        '1' => 27,
        '2' => 28,
        '3' => 29,
        '4' => 30,
        '5' => 31,
        '6' => 32,
        '7' => 33,
        '8' => 34,
        '9' => 35,
        '0' => 36,
        'A' => 37,
        'B' => 38,
        'C' => 39,
        'D' => 40,
        'E' => 41,
        'F' => 42,
        'G' => 43,
        'H' => 44,
        'I' => 45,
        'J' => 46,
        'K' => 47,
        'L' => 48,
        'M' => 49,
        'N' => 50,
        'O' => 51,
        'P' => 52,
        'Q' => 53,
        'R' => 54,
        'S' => 55,
        'T' => 56,
        'U' => 57,
        'V' => 58,
        'W' => 59,
        'X' => 60,
        'Y' => 61,
        'Z' => 62,
        '!' => 63,
        '\"' => 64,
        '£' => 65,
        '\$' => 66,
        '^' => 67,
        '&' => 68,
        '*' => 69,
        '(' => 70,
        ')' => 71,
        '_' => 72,
        '+' => 73,
        '-' => 74,
        '=' => 75,
        '`' => 76,
        ',' => 77,
        '.' => 78,
        '/' => 79,
        '<' => 80,
        '>' => 81,
        '?' => 82,
        ';' => 83,
        '\'' => 84,
        '#' => 85,
        ':' => 86,
        '@' => 87,
        '~' => 88,
        '[' => 89,
        ']' => 90,
        '{' => 91,
        '}' => 92,
        ' ' => 93,
        '%' => 94,
    );

    function lookup($char){
        global $cal_map;
        foreach(array_keys($cal_map) as $k){
            if ($cal_map[$k] == $char){
                return $k;
            }
        }
    }

    function crack_total($nums){
        for ($i = 0; $i<=1000; $i++){
            $total = 0;
            foreach($nums as $num){
                $total += $num - $i;
            }
            if ($i == $total){
                return $i;
            }
        }
        return 0;
    }

    function crack_gcrypt($input){
        $chars = array();

        for ($i = 0; $i < strlen($input); $i++){
            $chars[] = substr($input, $i, 1);
        }

        $nums = array();
        $c = 0;
        while($c < count($chars)){
            $len = $chars[$c];
            $c++;
            $char = '';
            for($i=0; $i<$len; $i++){
                $char .= $chars[$c];
                $c++;
            }
            $nums[] = $char;
        }
        $total = crack_total($nums);
        $output = '';
        foreach($nums as $num){
            $output .= lookup($num - $total);
        }
        return $output;
    }
?>