- パスワードを作成するRubyスクリプト makepass.rb を作りました。無保証ですので、使いたい方は自己責任で。
require 'io/console'
require 'digest/sha2'
require 'base64'
require 'win32/clipboard'
Win32::Clipboard.set_data('')
STDIN.noecho do |io|
puts "Hit many keys randomly."
s = io.gets
while s.length < 100
puts "I need more random keys."
s += io.gets
end
d = Digest::SHA512.digest(s)
e = Base64.encode64(d)
e.gsub!(/[\+\/=\n]/, '')
puts "Thanks. I've saved a password-like string in your clipboard."
Win32::Clipboard.set_data(e)
end
C:\> ruby -v
ruby 1.9.3p374 (2013-01-15) [i386-mingw32]
C:\> gem install win32-clipboard
Fetching: win32-api-1.4.8-x86-mingw32.gem (100%)
Fetching: windows-api-0.4.2.gem (100%)
Fetching: windows-pr-1.2.2.gem (100%)
Fetching: win32-clipboard-0.5.2.gem (100%)
Successfully installed win32-api-1.4.8-x86-mingw32
Successfully installed windows-api-0.4.2
Successfully installed windows-pr-1.2.2
Successfully installed win32-clipboard-0.5.2
4 gems installed
Installing ri documentation for win32-api-1.4.8-x86-mingw32...
Installing ri documentation for windows-api-0.4.2...
Installing ri documentation for windows-pr-1.2.2...
Installing ri documentation for win32-clipboard-0.5.2...
Installing RDoc documentation for win32-api-1.4.8-x86-mingw32...
Installing RDoc documentation for windows-api-0.4.2...
Installing RDoc documentation for windows-pr-1.2.2...
Installing RDoc documentation for win32-clipboard-0.5.2...
C:\> ruby makepass.rb
Hit many keys randomly. ←ここでキーボードを乱打し、最後にENTERキーを打つ。
I need more random keys. ←キー不足のときにはこういう表示になる。
Thanks. I've saved a password-like string in your clipboard.
この時点でクリップボードに、
4GXt2VP9lpievshQmAVYFOJtXqQ26YadHFei1HYRyYTnNH8EPvIETEg6rjTr6DssOrPSArECcCCqrqfBsqA
のようなパスワードっぽい文字列が入っているので適当に使う。
- 解説
- ユーザがキーボードを乱打した文字列を予測困難な文字列として用いる。
- ある程度の長さがあったほうがいいので100文字くらいにしている(適当)。
- その文字列を暗号学的に強いメッセージダイジェスト関数SHA-256を用いてハッシュ値を求める。
- ハッシュ値をBase64でエンコードする。
- 改行と記号(+, /, =)を取り除く(入れたい方は好きに)。
- できた文字列をクリップボードにセットする。
- 注意