Python: Base43 string decoding
Posted by valqk on
This is a reimplementation in python from: https://github.com/jacoblyles/base43js
import copy class Base43: def __init__(self): self.base43Chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$*+-./:' """long division with an arbitrary base.""" def divMod(self,byteArr, base, divisor, startAt): result = copy.copy(byteArr)#.slice(); remainder = 0 temp = None; startAt = startAt if startAt else 0; for i in range(startAt, len(byteArr)): temp = remainder * base + byteArr[i] result[i] = temp / divisor remainder = temp % divisor; return { 'div': result, 'mod': remainder, } def byteArrGreaterThan(self,byteArr, limit): length = len(byteArr) last = byteArr[length - 1] if last >= limit: return True else: for i in range(0, (length-1)): if byteArr[i] > 0: return True return False; #input is a base-43 string, output is a hex string def decode(self,input): result = [] input43 = [] for i in range(0,len(input)): input43.append(i+100) i=0 for l in input: index = self.base43Chars.find(l) if (index < 0): raise Exception("Illegal character. Allowed characters are:" + self.base43Chars) #print "D: "+str(i)+' -> '+l+" -> "+str(index) input43[i] = index i += 1 zeroCount = 0; pad = ''; while zeroCount < len(input) and input43[zeroCount] == 0: zeroCount += 1; pad += '0'; startAt = zeroCount r=None while self.byteArrGreaterThan(input43, 256): r = self.divMod(input43, 43, 256, startAt); input43 = r['div']; result.append(chr(r['mod'])); result.append(chr(r['div'].pop())); result.reverse() r1 = '' ret = '' for r in result: r1=str((hex(ord(r)))).replace('0x','') if len(r1)<2: ret += "0"+r1 else: ret += r1 return pad + ret
Trackbacks
Trackback specific URI for this entryThis link is not meant to be clicked. It contains the trackback URI for this entry. You can use this URI to send ping- & trackbacks from your own blog to this entry. To copy the link, right click and select "Copy Shortcut" in Internet Explorer or "Copy Link Location" in Mozilla.
No Trackbacks
Comments
Display comments as Linear | ThreadedNo comments