Skip to content

Instantly share code, notes, and snippets.

@kwilczynski
Created November 28, 2019 17:26
Show Gist options
  • Save kwilczynski/343988c22cbacb3e31669bcb2f8c0bb8 to your computer and use it in GitHub Desktop.
Save kwilczynski/343988c22cbacb3e31669bcb2f8c0bb8 to your computer and use it in GitHub Desktop.
  krzysztof@rocinante  ~  $ irb
irb(main):001:0> cis1 = 0x0000001
=> 1
irb(main):002:0> cis2 = 0x0000002
=> 2
irb(main):003:0> ubuntu = 0x0000010
=> 16
irb(main):004:0> centos = 0x0000020
=> 32
irb(main):005:0> amazon = 0x0000040
=> 64
irb(main):006:0> windows = 0x0000080
=> 128
irb(main):007:0> cloudwatch = 0x0000100
=> 256
irb(main):008:0> sumologic = 0x0000200
=> 512
irb(main):009:0> datadog = 0x0000400
=> 1024
irb(main):010:0> trendmicro = 0x0000800
=> 2048
irb(main):011:0> awscli = 0x0001000
=> 4096
irb(main):012:0>
irb(main):013:0* bits = {
irb(main):014:1* 0x0000001 => "cis1",
irb(main):015:1* 0x0000002 => "cis2",
0x0000010 => "ubuntu",
0x0000020 => "centos",
0x0000040 => "amazon",
0x0000080 => "windows",
0x0000100 => "cloudwatch",
0x0000200 => "sumologic",
0x0000400 => "datadog",
0x0000800 => "trendmicro",
0x0001000 => "awscli",
}
x = 0
x |= ubuntu
x |= cloudwatch
x |= datadog
x |= awscli
require "base64"
b = Base64.encode64(x.to_s).strip
p b
f = []
i = Base64.decode64(b).to_i
while i > 0
n = 2 ** (Math.log(i) / Math.log(2)).to_i
i = i - n
f.insert(0, bits[n])
end
p firb(main):016:1* 0x0000010 => "ubuntu",
irb(main):017:1* 0x0000020 => "centos",
irb(main):018:1* 0x0000040 => "amazon",
irb(main):019:1* 0x0000080 => "windows",
irb(main):020:1* 0x0000100 => "cloudwatch",
irb(main):021:1* 0x0000200 => "sumologic",
irb(main):022:1* 0x0000400 => "datadog",
irb(main):023:1* 0x0000800 => "trendmicro",
irb(main):024:1* 0x0001000 => "awscli",
irb(main):025:1* }
=> {1=>"cis1", 2=>"cis2", 16=>"ubuntu", 32=>"centos", 64=>"amazon", 128=>"windows", 256=>"cloudwatch", 512=>"sumologic", 1024=>"datadog", 2048=>"trendmicro", 4096=>"awscli"}
irb(main):026:0>
irb(main):027:0* x = 0
=> 0
irb(main):028:0> x |= ubuntu
=> 16
irb(main):029:0> x |= cloudwatch
=> 272
irb(main):030:0> x |= datadog
=> 1296
irb(main):031:0> x |= awscli
=> 5392
irb(main):032:0>
irb(main):033:0* require "base64"
=> true
irb(main):034:0> b = Base64.encode64(x.to_s).strip
=> "NTM5Mg=="
irb(main):035:0>
irb(main):036:0* p b
"NTM5Mg=="
=> "NTM5Mg=="
irb(main):037:0>
irb(main):038:0* f = []
=> []
irb(main):039:0> i = Base64.decode64(b).to_i
=> 5392
irb(main):040:0> while i > 0
irb(main):041:1> n = 2 ** (Math.log(i) / Math.log(2)).to_i
irb(main):042:1> i = i - n
irb(main):043:1> f.insert(0, bits[n])
irb(main):044:1> end
=> nil
irb(main):045:0>
irb(main):046:0* p f
["ubuntu", "cloudwatch", "datadog", "awscli"]
=> ["ubuntu", "cloudwatch", "datadog", "awscli"]
irb(main):047:0>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment