Created
September 30, 2016 20:51
-
-
Save pkarman/d7239bd00b49645b9f5ff5200fdb78c2 to your computer and use it in GitHub Desktop.
build ssn rainbow table with dbm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require 'digest' | |
| require 'openssl' | |
| require 'base64' | |
| require 'dbm' | |
| # usage: ruby build-ssn-db.rb dbname path/to/key keypassphrase [range_start] [range_end] | |
| # range_start and _end should be 1 .. 999 | |
| # | |
| # example: ruby build-ssn-db.rb ssn-01-10 path/to/key pw 1 10 | |
| def db | |
| @_db ||= DBM.open(@db_name, 0600, DBM::WRCREAT) | |
| end | |
| def encode(text) | |
| Base64.strict_encode64(text) | |
| end | |
| def sign(text) | |
| encode(@private_key.sign(@digest, encode(text))) | |
| end | |
| def build_ssn_rainbow_table(range_start=1, range_end=999) | |
| (range_start..range_end).each do |area_number| | |
| puts "#{area_number}" | |
| (1..99).each do |group_number| | |
| (1..9999).each do |serial_number| | |
| ssn = sprintf("%03d-%02d-%04d", area_number, group_number, serial_number) | |
| signature = Digest::SHA256.hexdigest(sign(ssn)) | |
| db[signature] = ssn | |
| end | |
| end | |
| end | |
| end | |
| @digest = OpenSSL::Digest::SHA256.new | |
| @db_name = ARGV.shift | |
| @private_key = OpenSSL::PKey::RSA.new(File.read(ARGV.shift), ARGV.shift) | |
| build_ssn_rainbow_table(*ARGV) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment