Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Random bit encoder and decoder by Nick Ku"""
- def number_to_character( number ):
- if number < 10:
- return chr( number + 48)
- elif 10 <= number <= 35:
- return chr( number + 55 )
- elif 35 < number <= 61:
- return chr( number + 61 )
- elif number == 62:
- return chr( 45 )
- elif number == 63:
- return chr( 43 )
- else:
- print ('Invalid number')
- def character_to_number( character ):
- number = ord( character )
- if 48 <= number <= 57:
- return number-48
- elif 65 <= number <= 90:
- return number - 55
- elif 97 <= number <= 122:
- return number - 61
- elif number == 45:
- return 62
- elif number == 43:
- return 63
- else:
- print ('Invalid character')
- def encode( number ):
- new_number = ""
- if number < 0:
- print ('Negative numbers are invalid')
- while number !=0:
- remainder = number % 64
- new_number += number_to_character(remainder)
- number //= 64
- while len(new_number) < 6:
- new_number += '0'
- new_number = new_number[:6]
- return new_number
- def decode( number ):
- result = 0
- exponent = 0
- for item in number:
- result += character_to_number(item) * (64**exponent)
- exponent += 1
- return result
- def bitencode( number, bits = [ 5, 11, 17, 23, 29, 35, 4, 10, 16, 22, 28, 34, 3, 9, 15, 21, 27, 33, 2,
- 8, 14, 20, 26, 32, 1, 7, 13, 19, 25, 31, 0, 6, 12, 18, 24, 30,]):
- bit_shift = bits[::-1]
- new_number = 0
- order = 0
- for x in bit_shift:
- new_number += (((number >> x) & 1) << order)
- order +=1
- return encode(new_number)
- def bitdecode( number, bits = [ 5, 11, 17, 23, 29, 35, 4, 10, 16, 22, 28, 34, 3, 9, 15, 21, 27, 33, 2,
- 8, 14, 20, 26, 32, 1, 7, 13, 19, 25, 31, 0, 6, 12, 18, 24, 30,]):
- bit_shift = bits[::-1]
- new_number = 0
- old_number = decode(number)
- order = 0
- for x in bit_shift:
- new_number += (((old_number >> order) & 1) << x)
- order += 1
- return new_number
- import random
- def randomencode( number ):
- count = 0
- temp = number
- while temp != 0:
- count += temp & 1
- temp = temp >> 1
- bits = [
- 5, 11, 17, 23, 29, 35,
- 4, 10, 16, 22, 28, 34,
- 3, 9, 15, 21, 27, 33,
- 2, 8, 14, 20, 26, 32,
- 1, 7, 13, 19, 25, 31,
- 0, 6, 12, 18, 24, 30,
- ]
- random.seed(count)
- random.shuffle(bits)
- return bitencode(number, bits)
- def randomdecode( number ):
- temp = decode(number)
- count = 0
- while temp != 0:
- count += (temp&1)
- temp = temp >> 1
- bits = [
- 5, 11, 17, 23, 29, 35,
- 4, 10, 16, 22, 28, 34,
- 3, 9, 15, 21, 27, 33,
- 2, 8, 14, 20, 26, 32,
- 1, 7, 13, 19, 25, 31,
- 0, 6, 12, 18, 24, 30,
- ]
- random.seed(count)
- random.shuffle(bits)
- return bitdecode(number, bits)
- print (randomdecode(randomencode(1234567890)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement