Sha256: d53d8e58fff415c8860148f16914c59af5447f1a3a2e88b4d3ee0c758d302960
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
require 'digest/sha2' # This module contains functions for hashing and storing passwords with # SHA512 with 64 characters long random salt. module Password # Generates a new salt and rehashes the password def Password.update(password) salt = self.salt hash = self.hash(password, salt) self.store(hash, salt) end # Checks the password against the stored password def Password.check(password, store) hash = self.get_hash(store) salt = self.get_salt(store) if self.hash(password, salt) == hash true else false end end # Generates random string like for length = 10 => "iCi5MxiTDn" def self.generate_random_string(length) length.to_i.times.collect { (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }.join end protected # Generates a psuedo-random 64 character string def Password.salt self.generate_random_string(64) end # Generates a 128 character hash def Password.hash(password, salt) digest = "#{password}:#{salt}" 500.times { digest = Digest::SHA512.hexdigest(digest) } digest end # Mixes the hash and salt together for storage def Password.store(hash, salt) hash + salt end # Gets the hash from a stored password def Password.get_hash(store) store[0..127] end # Gets the salt from a stored password def Password.get_salt(store) store[128..191] end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
alberich-0.2.0 | test/dummy/lib/password.rb |