2017-10-20 171 views
0

我在解密&对大文件执行一些基本操作时遇到gpg解密问题。解密后的正常解密文件为60G &,其膨胀至450G。gpg解密块大小限制

解密,然后rowcount(wc -l)只在HDFS层内完成;以下是代码片段

rowCount=`hdfs dfs -cat ${hdfsDir}/{fileName} | decrypt | wc -l` 

上面的“解密”应该由gpg --decrypt ...命令替换。我没有写在这里只是为了避免它。 对于像2〜3Gigs这样的小文件,代码工作正常。但对于像上面提到的大小的大文件,解密会抛出错误:

gpg: block_filter 0x7f2cf62547c0: read error (size=14560,a->size=14560) 
gpg: block_filter 0x7f2cf624c990: read error (size=14900,a->size=14900) 
gpg: mdc_packet with invalid encoding 
gpg: decryption failed: Invalid packet 
gpg: block_filter: pending bytes! 
gpg: block_filter: pending bytes! 

任何人都知道发生了什么事?

+0

有一个误解,加密/解密不会改变数据大小超过十几个字节。压缩可以彻底改变文件大小。那么,究竟发生了什么,这个问题是模糊的。建议使用小尺寸文件并在每个步骤检查数据。提供[mcve], – zaph

+0

好的。我不认为除gpg加密/解密之外,还有其他压缩算法正在运行。也许它会更清楚,如果我把加密/ decrytion命令在这里: 加密: 'GPG --recipient [email protected] --encrypt ' 解密: '猫FILENAME.gpg | gpg --batch --passphrase-file passPhraseFile --yes --recipient [email protected] --decrypt' 这里没有压缩发生;在所有。希望这是一个最小的开始。 – knowone

+0

OK,那么gpg是否也提供压缩?你应该知道,如果你正在使用它。 – zaph

回答

0

没有“块大小限制”这样的事情。数据加密在块大小块上加密字节到字节(AES为16字节)。最多可以添加一块数据,以便将最后一个字节填充到完整的块中,并在解密时将其删除。

gpg默认压缩,然后加密。所以正是压缩/解压缩导致大小增加解密。

注意:我使用的是:“gpg压缩”,最热门的问题是:“GNU GPG默认压缩吗?”第一个答案是:“是”和“默认为'ZIP'”。