Sıkıştırma

Bu belge aşağıdaki yöntem için geçerlidir: Update API (v4): threatListUpdates.fetch.

Sıkıştırma hakkında

Sıkıştırma, Güvenli Tarama API'lerinin (v4) temel bir özelliğidir. Sıkıştırma, bant genişliği gereksinimlerini önemli ölçüde azaltır. Bu durum özellikle mobil cihazlar için geçerlidir ancak yalnızca mobil cihazlarla sınırlı değildir. Güvenli Tarama sunucusu şu anda Rice sıkıştırmasını desteklemektedir. Gelecekte ek sıkıştırma yöntemleri eklenebilir.

Sıkıştırma, supportedCompressions alanı ve CompressionType kullanılarak ayarlanır. Müşteriler RICE ve RAW sıkıştırma türlerini kullanmalıdır. Güvenli Tarama, sıkıştırma türü ayarlanmadığında COMPRESSION_TYPE_UNSPECIFIED türünü kullanır (RAW sıkıştırma yerine kullanılır).

Güvenli Tarama sunucusu, istemci doğru HTTP sıkıştırma üstbilgisini ayarladığı sürece (Wikipedia'daki HTTP sıkıştırma makalesine bakın) seçilen sıkıştırma türünden bağımsız olarak yanıtları daha da sıkıştırmak için standart HTTP sıkıştırmasını da kullanır.

Pirinç sıkıştırma

Belirtildiği gibi, Güvenli Tarama sunucusu şu anda Rice sıkıştırmasını desteklemektedir (Golomb-Rice kodlamasıyla ilgili ayrıntılı bilgi için Wikipedia'daki Golomb kodlama makalesine bakın).

Sıkıştırma/açma

RiceDeltaEncoding nesnesi, Rice-Golomb kodlu verileri temsil eder ve sıkıştırılmış kaldırma dizinlerini veya sıkıştırılmış 4 baytlık karma ön eklerini göndermek için kullanılır. (4 bayttan uzun karma önekler sıkıştırılmaz ve bunun yerine ham biçimde sunulur.)

Kaldırma dizinleri için dizin listesi artan düzende sıralanır ve ardından RICE kodlaması kullanılarak delta kodlanır. Eklemeler için 4 baytlık karma önekleri, küçük endian uint32'ler olarak yeniden yorumlanır, artan düzende sıralanır ve ardından RICE kodlaması kullanılarak delta kodlanır. RICE sıkıştırması ile RAW arasındaki karma biçimi farkına dikkat edin: RAW karmaları sözlükbilimsel olarak sıralanmış baytlardır. Rice karmaları ise artan sırada sıralanmış uint32'lerdir (açıldıktan sonra).

Yani [1, 5, 7, 13] tam sayı listesi 1 (ilk değer) ve [4, 2, 6] farkları olarak kodlanır.

İlk değer firstValue alanında depolanır ve delta değerleri Golomb-Rice kodlayıcı kullanılarak kodlanır. K parametresi (aşağıya bakın) riceParameter içinde saklanır. numEntries alanı, Rice kodlayıcıda kodlanan delta sayısını (yukarıdaki örneğimizde 4 değil, 3) içerir. encodedData alanı, gerçek kodlanmış delta değerlerini içerir.

Kodlayıcı/kod çözücü

Rice kodlayıcı/kod çözücüde her delta n, n = (q<<k) + r (veya n = q * (2**k) + r) olacak şekilde q ve r olarak kodlanır. k, Rice kodlayıcı/kod çözücünün sabiti ve parametresidir. q ve r değerleri, bit akışında farklı kodlama şemaları kullanılarak kodlanır.

Bölüm q, 1'li kodlamayla kodlanır ve ardından 0 gelir. Yani 3, 1110 olarak, 4, 11110 olarak ve 7, 11111110 olarak kodlanır. Önce bölüm q kod çözülür.

Kalan r, kesilmiş ikili kodlama kullanılarak kodlanır. Bit akışına yalnızca r'nin en az anlamlı k biti yazılır (ve dolayısıyla okunur). Kalan r, q çözüldükten sonra çözülür.

Bit kodlayıcı/kod çözücü

Rice kodlayıcı, tek bitlerin bit kodlayıcıya eklenebildiği bir bit kodlayıcı/kod çözücüye dayanır. Yani yalnızca iki bit uzunluğunda olabilecek bir bölümü (q) kodlamak için kullanılır.

Bit kodlayıcı, (8 bit) baytların listesidir. Bitler, ilk bayttaki en düşük anlamlı bitten ilk bayttaki en yüksek anlamlı bite doğru ayarlanır. Bir baytın tüm bitleri zaten ayarlanmışsa bayt listesinin sonuna yeni bir bayt (sıfır olarak başlatılmış) eklenir. Son bayt tam olarak kullanılmazsa en yüksek anlamlı bitleri sıfır olarak ayarlanır. Örnek:

Eklenen Bits'ler BitEncoder After Adding Bits
[]
0 [00000000]
1 [00000010]
1 [00000110]
1,0,1 [00101110]
0,0,0 [00101110, 00000000]
1,1,0 [00101110, 00000110]