45 lines
967 B
Ruby
45 lines
967 B
Ruby
require 'digest'
|
|
require 'facets/string/random_binary'
|
|
|
|
module Digest
|
|
|
|
module Instance
|
|
# CREDIT: Guido De Rosa
|
|
def salted_digest(str='', salt=:auto)
|
|
if salt == :auto
|
|
salt = String.random_binary(digest_length)
|
|
end
|
|
digest(str + salt) + salt
|
|
end
|
|
|
|
# CREDIT: Guido De Rosa
|
|
def salted_hexdigest(str, salt)
|
|
Digest.hexencode(salted_digest(str, salt))
|
|
end
|
|
|
|
# CREDIT: Guido De Rosa
|
|
def salted_base64digest(str, salt)
|
|
[salted_digest(str, salt)].pack('m0')
|
|
end
|
|
end
|
|
|
|
class Class
|
|
# CREDIT: Guido De Rosa
|
|
def self.salted_digest(str, salt=:auto, *args)
|
|
new(*args).salted_digest(str, salt)
|
|
end
|
|
|
|
# CREDIT: Guido De Rosa
|
|
def self.salted_hexdigest(str, salt=:auto, *args)
|
|
new(*args).salted_hexdigest(str, salt)
|
|
end
|
|
|
|
# CREDIT: Guido De Rosa
|
|
def self.salted_base64digest(str, salt=:auto, *args)
|
|
new(*args).salted_base64digest(str, salt)
|
|
end
|
|
end
|
|
|
|
end
|
|
|