done is better than perfect

自分が学んだことや、作成したプログラムの記事を書きます。すべての記載は他に定める場合を除き個人的なものです。

makepass.pyを書いてみた

こちらのソース を参考に、Pythonでmakepass.pyを作ってみました
# -*- coding: utf-8 -*-
import getpass
import hashlib
import base64
import re
import subprocess

def makepass():
    seed = getpass.getpass("Hit many keys randomly. ")
    while len(seed) < 100:
        print "I need more random keys."
        seed += getpass.getpass("Hit many keys randomly. ")

    d = hashlib.sha512(seed).digest()
    e = base64.b64encode(d)
    e = re.sub("[\+\/=\n]", "", e)
    p = subprocess.Popen(["pbcopy"], stdin = subprocess.PIPE)
    p.communicate(e)
    print "Thanks. I've saved a password-like string in your clipboard."

if __name__ == "__main__":
    makepass()
使用方法は次の通りです
$ python makepass.py
Hit many keys randomly.        ← キーボード乱打してください。Enterで入力
Thanks. I've saved a password-like string in your clipboard.        ← クリップボードにBase64でエンコードされた文字(英数字)が出力されています
Mac OSΧ 10.8.2 + Python 2.7.3で動作確認しております
  • 本家様との差異
    • 乱打したキーが表示されないように、標準モジュールであるgetpassを使用
    • Windowsならwin32api使えば良さそうですが、Macでの開発だったのでsubprocessを使用
もしお使いになる際は自己責任でお願いします ハッシュに使うシードに画像なんかのファイルを指定したり、パスワードとして出てくる文字数や記号の種類なんかに制限を加えるオプションをつけたりなんかすると面白そうです。時間があったらやってみよう