Advertisement
Cinestra

Nick Ku- Random bit encoder and decoder

Oct 24th, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. """Random bit encoder and decoder by Nick Ku"""
  2.  
  3. def number_to_character( number ):
  4. if number < 10:
  5. return chr( number + 48)
  6. elif 10 <= number <= 35:
  7. return chr( number + 55 )
  8. elif 35 < number <= 61:
  9. return chr( number + 61 )
  10. elif number == 62:
  11. return chr( 45 )
  12. elif number == 63:
  13. return chr( 43 )
  14. else:
  15. print ('Invalid number')
  16.  
  17. def character_to_number( character ):
  18. number = ord( character )
  19. if 48 <= number <= 57:
  20. return number-48
  21. elif 65 <= number <= 90:
  22. return number - 55
  23. elif 97 <= number <= 122:
  24. return number - 61
  25. elif number == 45:
  26. return 62
  27. elif number == 43:
  28. return 63
  29. else:
  30. print ('Invalid character')
  31.  
  32. def encode( number ):
  33. new_number = ""
  34. if number < 0:
  35. print ('Negative numbers are invalid')
  36. while number !=0:
  37. remainder = number % 64
  38. new_number += number_to_character(remainder)
  39. number //= 64
  40. while len(new_number) < 6:
  41. new_number += '0'
  42. new_number = new_number[:6]
  43. return new_number
  44.  
  45. def decode( number ):
  46. result = 0
  47. exponent = 0
  48. for item in number:
  49. result += character_to_number(item) * (64**exponent)
  50. exponent += 1
  51. return result
  52.  
  53. def bitencode( number, bits = [ 5, 11, 17, 23, 29, 35, 4, 10, 16, 22, 28, 34, 3, 9, 15, 21, 27, 33, 2,
  54. 8, 14, 20, 26, 32, 1, 7, 13, 19, 25, 31, 0, 6, 12, 18, 24, 30,]):
  55. bit_shift = bits[::-1]
  56. new_number = 0
  57. order = 0
  58. for x in bit_shift:
  59. new_number += (((number >> x) & 1) << order)
  60. order +=1
  61. return encode(new_number)
  62.  
  63. def bitdecode( number, bits = [ 5, 11, 17, 23, 29, 35, 4, 10, 16, 22, 28, 34, 3, 9, 15, 21, 27, 33, 2,
  64. 8, 14, 20, 26, 32, 1, 7, 13, 19, 25, 31, 0, 6, 12, 18, 24, 30,]):
  65. bit_shift = bits[::-1]
  66. new_number = 0
  67. old_number = decode(number)
  68. order = 0
  69. for x in bit_shift:
  70. new_number += (((old_number >> order) & 1) << x)
  71. order += 1
  72. return new_number
  73.  
  74. import random
  75.  
  76. def randomencode( number ):
  77. count = 0
  78. temp = number
  79. while temp != 0:
  80. count += temp & 1
  81. temp = temp >> 1
  82. bits = [
  83. 5, 11, 17, 23, 29, 35,
  84. 4, 10, 16, 22, 28, 34,
  85. 3, 9, 15, 21, 27, 33,
  86. 2, 8, 14, 20, 26, 32,
  87. 1, 7, 13, 19, 25, 31,
  88. 0, 6, 12, 18, 24, 30,
  89. ]
  90. random.seed(count)
  91. random.shuffle(bits)
  92. return bitencode(number, bits)
  93.  
  94. def randomdecode( number ):
  95. temp = decode(number)
  96. count = 0
  97. while temp != 0:
  98. count += (temp&1)
  99. temp = temp >> 1
  100. bits = [
  101. 5, 11, 17, 23, 29, 35,
  102. 4, 10, 16, 22, 28, 34,
  103. 3, 9, 15, 21, 27, 33,
  104. 2, 8, 14, 20, 26, 32,
  105. 1, 7, 13, 19, 25, 31,
  106. 0, 6, 12, 18, 24, 30,
  107. ]
  108. random.seed(count)
  109. random.shuffle(bits)
  110. return bitdecode(number, bits)
  111.  
  112. print (randomdecode(randomencode(1234567890)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement