misc: add text scrambler
A small program that randomly flips bits in a string, limited to printable characters This is intended for generating messed up text for corrupted communicationmaster
parent
9c5e120c75
commit
b9d026ce0c
|
@ -0,0 +1,78 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, random
|
||||
|
||||
def bitflip(byte, bit):
|
||||
bits = [
|
||||
0b00000001,
|
||||
0b00000010,
|
||||
0b00000100,
|
||||
0b00001000,
|
||||
0b00010000,
|
||||
0b00100000,
|
||||
0b01000000,
|
||||
0b10000000
|
||||
]
|
||||
negbits = [
|
||||
0b11111110,
|
||||
0b11111101,
|
||||
0b11111011,
|
||||
0b11110111,
|
||||
0b11101111,
|
||||
0b11011111,
|
||||
0b10111111,
|
||||
0b01111111
|
||||
]
|
||||
if byte | bits[bit] == byte:
|
||||
return byte & bits[bit]
|
||||
return byte | bits[bit]
|
||||
|
||||
def n_bits_off(byte, n):
|
||||
if n>8:
|
||||
raise Error
|
||||
|
||||
bits = []
|
||||
|
||||
while len(bits) < n:
|
||||
bit = random.randint(0,7)
|
||||
if bit in bits:
|
||||
continue
|
||||
bits.append(bit)
|
||||
|
||||
for bit in bits:
|
||||
byte = bitflip(byte, bit)
|
||||
|
||||
return byte
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if not len(sys.argv) == 2:
|
||||
print("This program takes exactly one argument: the string to scramble.")
|
||||
|
||||
output = []
|
||||
for character in list(sys.argv[1]):
|
||||
a = random.randint(0, 36)
|
||||
if ord(character)<33 or ord(character) > 126:
|
||||
output.append(character)
|
||||
elif a%18==0:
|
||||
byte = n_bits_off(ord(character), 3)
|
||||
if byte > 32 and byte < 127:
|
||||
output.append(chr(byte))
|
||||
else:
|
||||
output.append(character)
|
||||
elif a%12==0:
|
||||
byte = n_bits_off(ord(character), 2)
|
||||
if byte > 32 and byte < 127:
|
||||
output.append(chr(byte))
|
||||
else:
|
||||
output.append(character)
|
||||
elif a%9==0:
|
||||
byte = n_bits_off(ord(character), 1)
|
||||
if byte > 32 and byte < 127:
|
||||
output.append(chr(byte))
|
||||
else:
|
||||
output.append(character)
|
||||
else:
|
||||
output.append(character)
|
||||
|
||||
print("".join(output))
|
Loading…
Reference in New Issue