使用pycrypto AES或其他算法解密中间数据块



我正在寻找一种方法来使用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:])

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

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

最新更新