Parallel brute force: Difference between revisions

m
Line 756:
 
<lang haskell>import Crypto.Hash (hashWith, SHA256 (..), Digest)
import Control.Concurrent (getNumCapabilities)
import Control.Monad (replicateM, join)
import Control.Monad.Par (runPar, get, spawnP)
import Control.Concurrent (getNumCapabilities)
import Data.Text (Text, pack)
import Data.Text.Encoding (encodeUtf8)
Line 775:
 
bruteForce :: Int -> [Text] -> [(String, Text)]
bruteForce n xs = runPar $ dojoin <$> (mapM get =<< mapM (spawnP . foldr findMatch []) chunks)
pars <- mapM (spawnP . foldr findMatch []) chunks
result <- mapM get pars
pure $ join result
where
chunks = chunksOf (26 ^ 5 `div` n) xs
findMatch s accum
| hashed `elem` hashedValues = (show hashed, s) : accum
Line 790 ⟶ 787:
main = do
cores <- getNumCapabilities
printf "Using %d cores\n" cores
mapM_ (uncurry (printf "%s -> %s\n")) (bruteForce cores wordVariations)</lang>
{{out}}
Anonymous user