簡體   English   中英

部分解壓縮並估計實際解壓縮數據消息的大小

[英]Partially decompress and estimate size of actual decompressed data message

我有一個簡單的要求,如果超過X字節上限,我想丟棄或不處理消息。 但是,允許發件人壓縮消息並發送。 如果用戶創建帶有全0或1等的隨機消息,則壓縮熵變化很大。 但是,假設有一個受信任的發送者,則有一種方法可以窺視壓縮的消息並在解壓縮時估計其實際大小。 我正在使用java.util.zip使用Zip協議,但可以使用其他庫或語言的任何解決方案。

並不是的。

Deflate是一種流格式,它在開始之前對數據一無所知,因此無法嵌入解壓縮后的大小(如snappy,brieflz等格式可以嵌入)。

您可能要做的最好的事情就是使用流式API最多解壓縮MAX_MESSAGE_SIZE個字節(您可能需要使用MAX_MESSAGE_SIZE + 1 ;對於zlib,很難確定是否已到達流的末尾或是否已對其進行簡單處理除非您提供足夠的空間實際解壓縮更多數據,否則所有可用的輸入)。 如果您認為消息太長,這不會讓您及早停止處理,但會在消息確實太長時立即停止處理(這應該足以緩解DoS)。

不幸的是,您不能僅僅根據所見即所得來估計總大小,因為某人可以很容易地獲得在流的開頭很難進行壓縮的數據,然后百萬個相同的字節將被非常好地壓縮。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM