String#crypt
игнорирует любые дополнительные символы, поэтому используются только первые два.
"foobar".crypt("abc") # => abVbJXzHUY99s
"foobar".crypt("abd") # => abVbJXzHUY99s
Вместо этого вы можете использовать SHA1, чтобы предоставить вам 40-символьное шифрование и разрешить любую длину соли.
require 'digest/sha1'
Digest::SHA1.hexdigest("foobar" + "abc") # => 17dd6cae99582672c4b2ccc78fe4ad0888559ce7
Digest::SHA1.hexdigest("foobar" + "abd") # => 8aba27fd409286946504ac78098c41549d182316
ОБНОВЛЕНИЕ : как отметил Гай, SHA1 не лучший для производства. Вместо этого используйте SHA256 или SHA512. Подробности смотрите в его ответе.