3

我正在寻找一种使用 pycrypto 包中的加密算法的方法,该算法允许我加密原始的 LARGE 数据,然后仅解密该数据的 MIDDLE 块。换句话说,从某个偏移量开始解密数据,而不是从偏移量 0 开始解密。

我已经尝试过 AES,如下所示。但是,如果我从加密数据的请求到我真正需要解密的部分,它只允许我正确解密数据,而不是仅仅解密中间的数据块(当然使用正确的密钥),并跳过解密这个中间块之前的部分。这对于节省时间和处理能力很重要。假设您有一个 4GB 的原始数据。在某个时间点,您只需要偏移 3GB-3.5GB 的数据。解密整个 2GB 数据以获得所需的 1GB 块是浪费时间和资源......

这是所有加密/解密算法的本质吗?也许你可以推荐一些我想要的东西?这与密钥一起使用并且非常安全..

    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:])
4

1 回答 1

2

您正在使用CBC(密文块链接)模式,其中消息被分成块,一个块的输出用于加密下一个块。这基本上是一个顺序操作;要解密,您还必须按顺序处理密文。

如果您使用CTR(计数器)模式,则可以进行随机访问。

于 2011-11-24T19:56:37.187 回答