2014年11月10日月曜日

rubyのcryptではまった件

公式ドキュメントにも書いてあるんですけど、はまったので載せておきます。。。
文字列を暗号化したかったのでcrypt使ってたら、違う文字列なのに同じ結果になってしまいました。

試したrubyのバージョンはこれです。
$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]

まずはcryptつかったコード。
salt = 'qwlkjrklajfkajsfkljalkfjalksjflak'
 
str1 = '12345'
str2 = '100000001'
str3 = '100000002'
 
puts str1.crypt(salt)
puts str2.crypt(salt)
puts str3.crypt(salt)

実行するとこんな感じになります。
$ ruby test.rb 
qwAFWgKJ1g.E2
qw2y5TDILwIcA
qw2y5TDILwIcA

公式のドキュメントを見てみると、cryptは先頭8文字の内容で暗号化を行うようです。
なので、この場合はDigest使うとよいみたいです。
require 'digest'
 
str1 = '12345'
str2 = '100000001'
str3 = '100000002'
 
puts Digest::MD5.hexdigest(str1)
puts Digest::MD5.hexdigest(str2)
puts Digest::MD5.hexdigest(str3)

実行するとこうなりました。
$ ruby test.rb 
827ccb0eea8a706c4c34a16891f84e7b
d69d3401d01a8ceed4549434e5ad9f40
5a5ea04157ce4d020f65c3dd950f4fa3


参考URL
http://docs.ruby-lang.org/ja/2.1.0/method/String/i/crypt.html
http://ruby-doc.org/stdlib-2.1.0/libdoc/digest/rdoc/Digest.html

0 件のコメント:

コメントを投稿