您如何从中间解密 aes 128 ctr 加密文件以支持 http 范围?这是加密文件: https ://www.dropbox.com/s/8e9qembud6n3z7i/encrypted.txt?dl=0
密钥采用 base64 加密:E7VQWj3cv1JUi5pklirtDQ9SRJt1DhiqYgzPSpIiVP0
IV是通过解密给出数组的密钥来计算的:
Array
(
[0] => 330649690
[1] => 1037877074
[2] => 1418435172
[3] => 2519395597
[4] => 257049755
[5] => 1963858090
[6] => 1645006666
[7] => 2451723517
)
IV 是通过在第 4 个偏移处以 2 的长度对数组进行切片而获得的,并且数组的最后两个元素用 0 填充:
Array
(
[0] => 257049755
[1] => 1963858090
[2] => 0
[3] => 0
)
然后对密钥进行异或并制成一个 128 位数组,然后由 php 函数包将其转换为字符串:
$key = array($key[0] ^ $key[4], $key[1] ^ $key[5], $key[2] ^ $key[6], $key[3] ^ $key[7]);
$key = base64_encode(a32_to_str($key));
$iv = base64_encode(a32_to_str($iv));
然后使用普通的 php aes 库对该文件进行解密。我正在使用 mcrypt_generic 进行解密过程。当我尝试从第二个字节或第三个或中间解密文件时,就会出现问题。如果我从第一个字节解密它就可以了。
我注意到的另一件事是,如果我从第 2 个字节解密文件,但在此之前,我解密一个随机字符串或只是数字 0,然后从第 2 个字节开始解密。我想这与 IV 块计数器有关。我解密一个随机字节,然后继续解密实际的密码,这样它就可以工作了。我需要从一开始就开始解密文件,比如说从 40mb 偏移量来支持实时流搜索。但这会消耗太多内存,因为我必须先解密 40mb 的 0,然后才能进行搜索。如何将 IV 计数器值移动到 40mb 偏移量?
我读到每个解密块的IV增加+1。但是由于我的 IV 是一个数组,所以我已经尝试了所有方法,如果我在其中添加 1,它就不起作用。我已经做了几个月了,没有结果。请帮忙
这是我之前的问题,它有助于理解这个过程:AES 128 bit CTR partial file decryption with PHP