random.seed(k)
установит генератор случайных чисел в какое-то состояние, что он доставит тот же список случайных чисел для тех же k
.
import random
print [random.randint(0,255) for i in xrange(5)]
возвращает разные числа каждый раз, когда я запускаю скрипт.
import random
random.seed(2)
print [random.randint(0,255) for i in xrange(5)]
возвращает [244, 242, 14, 21, 213]
каждый раз, когда я запускаю скрипт.
Именно поэтому, если вы seed
генератор случайных чисел с конкретным значением k
, он даст вам очень конкретный список случайных чисел, которые можно использовать для кодирования данного файла, а затем декодировать его. *
Второй вопрос - да. Он работает с одним байтом за раз, поэтому 256 различных значений.
Третий вопрос - да, он вычисляет целочисленный порядковый номер строки из одного символа каждый раз. Это то же самое, что и bytearr = [ ord(c) for c in f1.read() ]
- читать символ за раз и создавать список его значений (0 - 255).
Наконец - см. Выше.
И просто питоническая подсказка для двух циклов ... если вы перебираете массив, вы можете использовать
for c in bytearr:
и затем используйте c
вместо
for i in range(len(bytearr)):
и с использованием bytearr[i]
.
Так, например:
for c in bytearr:
byt = (c + random.randint(0, 255)) % 256
f2.write(chr(byt))
Ваш вопрос: Когда я открываю расшифрованный файл с помощью пико, почему я вижу странные символы? Разве они не должны быть просто случайными алфавитами и числами?
Нет. Смотрите здесь . Есть 2 * 26 = 52 буквы, 10 цифр, еще несколько печатаемых символов и некоторые непечатаемые символы (перевод строки, табуляция, ...). Вы кодируете / декодируете десятичное значение (0-255), и ваша пико показывает символы в столбце «char».