Расшифруйте средний кусок данных, используя pycrypto AES или другой алгоритм - PullRequest
3 голосов
/ 24 ноября 2011

Я искал способ использовать алгоритм шифрования из пакета pycrypto, который позволил бы мне зашифровать оригинальный БОЛЬШОЙ фрагмент данных, а затем расшифровать только СРЕДНИЙ фрагмент данных. Другими словами, начинайте расшифровывать данные с определенным смещением, вместо того чтобы начинать расшифровывать их со смещением 0.

Я пробовал AES, как вы можете видеть ниже. Но это позволяет мне правильно расшифровывать данные только в том случае, если я перехожу от начала к зашифрованным данным к той части, которую мне действительно нужно расшифровать, вместо того, чтобы просто расшифровывать средний кусок данных (конечно, с соответствующим ключом) и пропустить дешифрование части до этого среднего куска. Это важно для экономии времени и вычислительной мощности. Допустим, у вас есть оригинальные данные 4 ГБ. В какой-то момент времени вам нужны только данные со смещением 3GB-3,5GB. Расшифровка всего 2 ГБ данных для получения необходимого вам фрагмента 1 ГБ - пустая трата времени и ресурсов ...

Это природа всех алгоритмов шифрования / дешифрования? Возможно, вы можете порекомендовать то, что делает то, что я хочу? Это работает с ключом и довольно безопасно ..

    from Crypto.Cipher import AES

key = '0123456789abcdef' #16 chars
mode = AES.MODE_CBC

e = AES.new(key, mode)

orig = 'hellohowareyousuhellohowareyousu' #32 chars
print len(orig)

a = e.encrypt(orig)
print len(a)

d = AES.new(key, mode)

#works
print d.decrypt(a[:16]) #aes requires encrypt/decrypt 16 chars at a time
print d.decrypt(a[16:])

#doesn't work
print d.decrypt(a[16:])

1 Ответ

2 голосов
/ 24 ноября 2011

Вы используете CBC (цепочка зашифрованного текста) режим, в котором сообщение разбивается на блоки, а выходные данные одного блока используются для шифрования следующего. Это принципиально последовательная операция; чтобы расшифровать, вы также должны последовательно работать с зашифрованным текстом.

Если вы используете режим CTR (счетчик) , вы можете иметь произвольный доступ.

...