パスワード生成サービスってあるじゃないですか。
私はいつもこのサービスを使ってます。
http://www.luft.co.jp/cgi/randam.php
(”password”でググると一番上に出てくるから)

で、別にこれで全然不満もないんですが、これくらいならすぐ作れそうだなーと思って作ってみました。

仕様

エンドポイント

GET http://content.yosiopp.net/app/passwd/

パラメタ

key description
t 文字種(0...英字, 1...英数, 2...英数+/, 未指定...英数記号)
n 文字数(default=12, max=256)
cb コールバックメソッド名

結果はjsonで出力します。

$ curl http://content.yosiopp.net/app/passwd/?t=1&n=16
{ "password" : "UaZJGlLcj63P" }

cbが指定されている場合jsonpで出力します。

$ curl http://content.yosiopp.net/app/passwd/?t=0&n=8&cb=callback
callback("rfJhZHMo")

実装

pythonを使って実装します。
さくらインターネットのレンタルサーバで動作させる想定で、
ポイントはshebangに /usr/local/bin/python を指定するのと、
拡張子を cgi にして、パーミッションを 705 に設定すること。だそう。

ちなみに2017年3月24日現在、さくらインターネットのレンタルサーバーではpython 2.7.6 がインストールされているようです。

#!/usr/local/bin/python

import random
import string
import cgi
import re

def passwd(t = None, n = 12):
    if t == 0:
        a = list(string.ascii_letters)
    elif t == 1:
        a = list(string.ascii_letters + string.digits)
    elif t == 2:
        a = list(string.ascii_letters + string.digits + "+/")
    else:
        a = [ chr(i) for i in range(0x21, 0x7f) if i != 0x5c ]
    return ''.join([ random.choice(a) for i in range(n) ])

form = cgi.FieldStorage()
try:
    t = int(form["t"].value) if form.has_key("t") else None
    n = min(int(form["n"].value), 256) if form.has_key("n") else 12
    cb = re.sub(r'[^a-zA-z0-9]|\`', '', form["cb"].value) if form.has_key("cb") else None
except:
    t = None
    n = 12
    cb = None
pw = passwd(t, n)
pw = pw.replace('"', '\\"')

if cb != None:
    ctype = "application/javascript"
    body = cb + "(\"" + pw + "\")"
else:
    ctype = "application/json"
    body = '{ "password" : "' + pw + '" }'

print "Content-Type: " + ctype
print "Content-Length: " + str(len(body))
print ""
print body

実装はこんな感じ。

注意

上記エンドポイントはhttpsには対応してないので、真面目に利用するのはセキュリティ上やめた方が良いかもですよ。
利用にあたってはyosioppは一切の責任を負いません。

参考URL