I like the idea of hashapass, but I’m unwilling to use an online tool, as I fear that someday it might be compromised. So I wrote down my own variant of hashapass. It uses slightly longer passwords, and sha256 as the hash function.
#! /usr/bin/python
"""
passha.py - Generate passwords from a master password and a parameter.
Based on hashapass (http://hashapass.com)
"""
import hmac
import hashlib
def main(passwd, param):
hm = hmac.HMAC(passwd, param, hashlib.sha256)
print hm.digest().encode("base64")[:10]
if __name__=="__main__":
import getpass
passwd = getpass.getpass()
param = raw_input("Parameter: ")
main(passwd, param)