Parallel brute force: Difference between revisions
Content added Content deleted
Line 756: | Line 756: | ||
<lang haskell>import Control.Concurrent (setNumCapabilities) |
<lang haskell>import Control.Concurrent (setNumCapabilities) |
||
import Crypto.Hash (hashWith, SHA256 (..), Digest) |
import Crypto.Hash (hashWith, SHA256 (..), Digest) |
||
import Control.Monad (replicateM, join) |
import Control.Monad (replicateM, join, (>=>)) |
||
import Control.Monad.Par (runPar, get, spawnP) |
import Control.Monad.Par (runPar, get, spawnP) |
||
import Data.ByteString (pack) |
import Data.ByteString (pack) |
||
Line 770: | Line 770: | ||
bruteForce :: Int -> [(String, String)] |
bruteForce :: Int -> [(String, String)] |
||
bruteForce n = runPar $ join <$> |
bruteForce n = runPar $ join <$> |
||
(mapM (spawnP . foldr findMatch []) >=> mapM get) chunks |
|||
where |
where |
||
chunks = chunksOf (26^5 `div` n) $ replicateM 5 [97..122] |
chunks = chunksOf (26^5 `div` n) $ replicateM 5 [97..122] |