
PA4 on Haskell
By: a guest on
Apr 14th, 2012 | syntax:
Haskell | size: 0.74 KB | hits: 27 | expires: Never
{-# LANGUAGE ViewPatterns #-}
import Data.Bits (xor)
import Data.Char
import Data.Hex (hex, unhex)
import Text.Regex
import Data.Maybe (mapMaybe)
import Data.List
unHex :: String -> String
unHex = head . unhex
listXor k m = zipWith xor (cycle k) m
stringXor (map ord -> k) (map ord -> m) = map chr $ listXor k m
validPad = matchRegex (mkRegex "GET /([0-9a-f]+) HTTP/1.1\" 404")
process valids = concat $ zipWith stringXor guesses ciphers where
guesses = tail $ map (stringXor "\16" . take 16) lastValids
ciphers = init $ map (drop 16) lastValids
lastValids = map (valids!!) [16-1,32-1..length valids - 1]
main = do
f <- readFile "proj4-log.txt"
putStrLn $ process $ map unHex $ concat $ mapMaybe validPad $ lines f