Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- from sys import argv
- from sys import exit
- def add(a, b):
- return a + b
- def lmodpad(str, n, ch):
- while len(str) % n > 0:
- str = ch + str
- return str
- def int8_bin(n):
- return "".join(map(lambda power: "1" if n & 2**power else "0", xrange(7, -1, -1)))
- def bin_b32(str):
- power_values = map(lambda power: int(str[4 - power]) * 2**power, xrange(4, -1, -1))
- return "0123456789ABCDEFGHIJKLMNOPQRSTUV"[reduce(add, power_values)]
- def ascii_b32(str):
- binstr = lmodpad("".join(map(int8_bin, map(ord, str))), 5, "0")
- b32chars = map(lambda start: bin_b32(binstr[start : start + 5]), xrange(0, len(binstr), 5))
- return reduce(add, b32chars, "")
- def b32_ascii(str):
- hexstr = "%02x" % int(str, 32)
- asciichars = map(lambda start: chr(int(hexstr[start : start + 2], 16)), xrange(0, len(hexstr), 2))
- return reduce(add, asciichars, "")
- def usage():
- print "base32.py - encode and decode base32"
- print "usage: base32.py {-e|-d} string"
- print ""
- print " -e encode ascii to base32"
- print " -d decode base32 to ascii"
- exit(1)
- def main():
- if len(argv) < 2:
- usage()
- if argv[1] == "-e":
- print ascii_b32(argv[2])
- elif argv[1] == "-d":
- print b32_ascii(argv[2])
- else:
- usage()
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement