wvogel日記

自分用の技術備忘録が多めです.

password

Haskellで何か書きたいなあ、と思ってふと思いついた。
パスワードの管理ソフトが欲しいなあ、と。
結構パスワードがあちこちばらばらになりがちで、一括して管理できるようなものが欲しいなと前々から思っていたんです。


で、パスワードの生成なんかもやってくれると嬉しいなみたいな。


作ってみた。
テキストファイルで作ったので、セキュリティとしてはだめだめですが笑
基礎はこんなもんですね。

あとはこれにバイナリなり暗号化なり、処理を加えてやれば完成です。


とっても適当に作ったので(パスワード長とか)、これでいいのかという感じですが、私一人が使う分には問題ないのでいいのです。
なので、とりあえず。

import System.Random
import System.IO
import Data.Char

c_list = ['a'..'z']++['A'..'Z']++['0'..'9']
file = "password.txt"

touples :: [String] -> (String,String)
touples (a:b:_) = (a,b)

mkPass :: String -> IO()
mkPass key = do g <- getStdGen
                let ns = map ((`mod`62).abs)
                              $ take (2*length key) $randoms g
                    pass = map (\(a,b)->b!!a).zip ns$repeat c_list
                  appendFile file $ key++" "++pass++"\n"

search :: String -> [(String,String)] -> IO()
search key xs = case lookup key xs of
        Just pass -> print pass
        Nothing   -> makePass key

main = do cs <- readFile file
          key <- getLine
          search key.map (touples.words) $ lines cs