xor: how come so slow?

Lawrence D'Oliveiro ldo at geek-central.gen.new_zealand
Fri Oct 17 03:51:37 EDT 2008


In message <48f5d1a5$0$40310$4fafbaef at reader5.news.tin.it>, Michele wrote:

> class Encoder(object):
>     def create_random_block(self, data, seed, blocksize):
>         number_of_blocks = int(len(data)/blocksize)
>         random.seed(seed)
>         random_block = ['0'] * blocksize
>         for index in range(number_of_blocks):
>             if int(random.getrandbits(1)) == 1:
>                 block = data[blocksize*index:blocksize*index+blocksize]
>                 for bit in range(len(block)):
>                     random_block[bit] =
> chr(ord(random_block[bit])^ord(block[bit])) # workaround per fare xor
> bit a bit di str; xor e' solo supportato per int -> ord
>         return ''.join(random_block)

OK, this function is randomly choosing blocks from data (of length
number_of_blocks * blocksize), and xoring them together to produce a single
block of length blocksize.

> piece = os.urandom(1024*1024)

Is piece really meant to be random? If so, your create_random_block function
isn't achieving much--xoring random data together isn't going to produce
anything more exciting than less random data than you started with.



More information about the Python-list mailing list