scatter_swap 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,37 +1,68 @@
1
1
  # ScatterSwap
2
2
 
3
- This is the hashing function behind ObfuscateId.
4
- https://github.com/namick/obfuscate_id
3
+ This is the integer hashing function behind [obfuscate_id](https://github.com/namick/obfuscate_id).
5
4
 
6
- Designing a hash function is a bit of a black art and
7
- being that I don't have math background, I must resort
8
- to this simplistic swaping and scattering of array elements.
5
+ > Designing a hash function is a bit of a black art and
6
+ > being that I don't have math background, I must resort
7
+ > to this simplistic swaping and scattering of array elements.
9
8
 
10
- After writing this and reading/learning some elemental hashing techniques,
11
- I realize this library is what is known as a Minimal perfect hash function:
12
- http://en.wikipedia.org/wiki/Perfect_hash_function#Minimal_perfect_hash_function
9
+ > After writing this and reading/learning some elemental hashing techniques,
10
+ > I realized that this library is an example of what is known as a [minimal perfect hash function](http://en.wikipedia.org/wiki/Perfect_hash_function#Minimal_perfect_hash_function).
13
11
 
14
- I welcome all improvements :-)
12
+ > I welcome all improvements via pull-requests :-)
15
13
 
16
- If you have some comments or suggestions, please contact me on github
17
- https://github.com/namick
14
+ > If you have some comments or suggestions, please contact me at `github@nathanamick.com` - nathan amick
18
15
 
19
- - nathan amick
16
+ ## Goals
20
17
 
18
+ We want to transform an integer into another random looking integer and then reliably tranform it back.
21
19
 
22
- This library is built for integers that can be expressed with 10 digits:
23
- It zero pads smaller numbers... so the number 1 is expressed with:
24
- 0000000001
20
+ It will turn the number `3` into `2356513904`, and it can then reliably reverse that scrambled `2356513904` number back into `3`
25
21
 
26
- The biggest number it can deal with is:
27
- 9999999999
22
+ We also want sequential integers to become non-sequential.
23
+
24
+ So for example it will turn `7001, 7002, 7003` into `5270192353, 7107163820, 3296163828`, and back again.
25
+
26
+ Please note, this is not encryption or related to security in any way. It lightly obfuscates an integer in a reversable way.
27
+
28
+ ## Usage
29
+
30
+ Pass a number (as an integer or string) to the 'hash' method and it will return an obfuscated version of it.
31
+
32
+ ScatterSwap.hash(1).to_i
33
+ #=> 4517239960
34
+
35
+ Pass that obfuscated version in and it will return the original (as a zero padded string).
36
+
37
+ ScatterSwap.reverse_hash(4517239960).to_i
38
+ #=> 1
39
+
40
+
41
+ *Because this was originally built for urls like this `example.com/users/00000000001` it outputs strings. This is why the examples above have `to_i` tacked on to them. Since extracting it to its own library, that may not make sense anymore. I'm considering output the same type as it is input. Thoughts?*
42
+
43
+ ## How it works
44
+
45
+ This library is built for integers that can be expressed with 10 digits.
46
+ It zero pads smaller numbers.
47
+
48
+ The number 1 is expressed with:
49
+
50
+ 0000000001
51
+
52
+ The biggest number it can deal with is 10 billion - 1:
53
+
54
+ 9999999999
28
55
 
29
56
  Since we are working with a limited sequential set of input integers, 10 billion,
30
57
  this algorithm will suffice for simple id obfuscation for many web apps.
58
+
31
59
  The largest value that Ruby on Rails default id, Mysql INT type, is just over 2 billion (2147483647)
32
60
  which is the same as 2 to the power of 31 minus 1, but considerably less than 10 billion.
33
61
 
62
+ ## Strategies
63
+
34
64
  ScatterSwap is an integer hash function designed to have:
65
+
35
66
  - zero collisions ( http://en.wikipedia.org/wiki/Perfect_hash_function )
36
67
  - achieve avalanche ( http://en.wikipedia.org/wiki/Avalanche_effect )
37
68
  - reversable
@@ -50,7 +81,6 @@ to swap out each of those zeros for something else.. something different
50
81
  for each place in the 10 digit array; for this, we need a map so that we
51
82
  can reverse it.
52
83
 
53
- TODO: Write a gem description
54
84
 
55
85
  ## Installation
56
86
 
@@ -66,10 +96,6 @@ Or install it yourself as:
66
96
 
67
97
  $ gem install scatter_swap
68
98
 
69
- ## Usage
70
-
71
- TODO: Write usage instructions here
72
-
73
99
  ## Contributing
74
100
 
75
101
  1. Fork it
@@ -1,3 +1,3 @@
1
1
  module ScatterSwap
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.email = ["github@nathanamick.com"]
11
11
  gem.description = %q{ScatterSwap is an integer hash function designed to have zero collisions, achieve avalanche, and be reversible.}
12
12
  gem.summary = %q{Minimal perfect hash function for 10 digit integers}
13
- gem.homepage = ""
13
+ gem.homepage = "https://github.com/namick/scatter_swap"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scatter_swap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -32,7 +32,7 @@ files:
32
32
  - scatter_swap.gemspec
33
33
  - spec/scatter_swap_spec.rb
34
34
  - spec/spec_helper.rb
35
- homepage: ''
35
+ homepage: https://github.com/namick/scatter_swap
36
36
  licenses: []
37
37
  post_install_message:
38
38
  rdoc_options: []