Advertisement
B1KMusic

base32.py (b32c.py improved)

Jul 29th, 2018
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.37 KB | None | 0 0
  1. #!/usr/bin/env python2
  2.  
  3. from sys import argv
  4. from sys import exit
  5.  
  6. def add(a, b):
  7.     return a + b
  8.  
  9. def lmodpad(str, n, ch):
  10.     while len(str) % n > 0:
  11.         str = ch + str
  12.  
  13.     return str
  14.  
  15. def int8_bin(n):
  16.     return "".join(map(lambda power: "1" if n & 2**power else "0", xrange(7, -1, -1)))
  17.  
  18. def bin_b32(str):
  19.     power_values = map(lambda power: int(str[4 - power]) * 2**power, xrange(4, -1, -1))
  20.  
  21.     return "0123456789ABCDEFGHIJKLMNOPQRSTUV"[reduce(add, power_values)]
  22.  
  23. def ascii_b32(str):
  24.     binstr = lmodpad("".join(map(int8_bin, map(ord, str))), 5, "0")
  25.     b32chars = map(lambda start: bin_b32(binstr[start : start + 5]), xrange(0, len(binstr), 5))
  26.  
  27.     return reduce(add, b32chars, "")
  28.  
  29. def b32_ascii(str):
  30.     hexstr = "%02x" % int(str, 32)
  31.     asciichars = map(lambda start: chr(int(hexstr[start : start + 2], 16)), xrange(0, len(hexstr), 2))
  32.  
  33.     return reduce(add, asciichars, "")
  34.  
  35. def usage():
  36.     print "base32.py - encode and decode base32"
  37.     print "usage: base32.py {-e|-d} string"
  38.     print ""
  39.     print "  -e  encode ascii to base32"
  40.     print "  -d  decode base32 to ascii"
  41.     exit(1)
  42.  
  43. def main():
  44.     if len(argv) < 2:
  45.         usage()
  46.  
  47.     if argv[1] == "-e":
  48.         print ascii_b32(argv[2])
  49.  
  50.     elif argv[1] == "-d":
  51.         print b32_ascii(argv[2])
  52.  
  53.     else:
  54.         usage()
  55.  
  56. if __name__ == "__main__":
  57.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement