Rubyリファレンス: Home

crypt (String)

Edit   History

標準クラス・モジュール > String > crypt

str.crypt(salt)

cryptメソッドは、引数をソルトとして用い、暗号化した文字列を返します。ソルトは2文字以上必要です。1文字以下では例外ArgumentErrorが発生します。

cryptメソッドの実装は、RubyをコンパイルしたC言語ライブラリのcrypt関数に依存します。基本的には、文字列の8文字とソルトの2文字を用いて、DESアルゴリズムで暗号化します。ソルトに使える文字はアルファベット、数字、ピリオド(.)、スラッシュ(/)です。暗号化された文字列の先頭2文字はソルトと同じです(Manpage of CRYPTを参照)。

次の例は、入力されたパスワードをcryptメソッドで暗号化し、password.txtに保存します。ソルトには、ランダムな2文字を指定しています。また、再びパスワードを入力させ、cryptメソッドで暗号化した文字列と保存した暗号を照合します。保存された暗号文字列はE3jG9M/fWKhuAのようになります。

print "Save password: "
password = gets.chomp
arr = ("a".."z").to_a + ("0".."9").to_a + ("A".."Z").to_a + ['.', '/']
salt = ""
2.times { salt += arr[rand(arr.length)] }
cipher = password.crypt(salt)
File.open("password.txt", "w") {|f| f.puts cipher }
 
print "Check password: "
password = gets.chomp
File.open("password.txt") {|f| cipher = f.gets.chomp }
if password.crypt(cipher) == cipher
  puts "OK"
else
  puts "NG"
end
Save password: foobar
Check password: foobar
OK

基本的なcrypt関数はあまり強い暗号ではないので、より強力な暗号を使いたいときはDigestライブラリのオブジェクトを使うといいでしょう。

関連項目