パスワードの強度
パスワードの強度 - rubyco(るびこ)の日記より。Haskellで実装してみました。あれ、Integerの累乗を求める関数って標準で用意されていませんでしたっけ?
module Main (main) where import Data.List (genericLength) power :: Integer -> Integer -> Integer power _ 0 = 1 power m n = m * power m (n - 1) passwordStrengthByBits :: [a] -> Integer -> Double passwordStrengthByBits xs = logBase 2 . fromInteger . power (genericLength xs) lower, upper, digit, alpha, alnum :: [Char] lower = ['a' .. 'z'] upper = ['A' .. 'Z'] digit = ['0' .. '9'] alpha = lower ++ upper alnum = alpha ++ digit main :: IO () main = do print $ passwordStrengthByBits lower 8 -- => 37.60351774512874 print $ passwordStrengthByBits alpha 8 -- => 45.60351774512874 print $ passwordStrengthByBits alnum 8 -- => 47.633570483095006