Base64 - co to jest? Definicja pojęcia KSeF
HTTP. Kodowanie Base64 zwiększa rozmiar pliku o około 33%.Co to jest Base64?
Base64 to schemat kodowania danych binarnych w formacie tekstowym, który używa 64 znaków ASCII (A-Z, a-z, 0-9, +, /) do reprezentowania danych binarnych. Base64 jest powszechnie używany do kodowania danych binarnych w protokołach tekstowych, takich jak HTTP, XML i JSON.
W kontekście Krajowego Systemu e-Faktur (KSeF), Base64 jest używany do kodowania zaszyfrowanych faktur i innych danych binarnych przed wysłaniem przez API. Kodowanie Base64 zwiększa rozmiar pliku o około 33% (4 znaki Base64 reprezentują 3 bajty binarne).
Ważne: przy obliczaniu rozmiaru pliku dla KSeF API, encryptedInvoiceSize odnosi się do rozmiaru binarnego pliku zaszyfrowanego, nie rozmiaru ciągu Base64. Jeśli plik jest kodowany w Base64 przed wysłaniem, rozmiar Base64 jest większy, ale encryptedInvoiceSize nadal odnosi się do rozmiaru binarnego.
Base64 w KSeF API
Base64 jest używany w KSeF API 2.0 do kodowania różnych danych binarnych: zaszyfrowane faktury (encryptedInvoiceContent) - faktury zaszyfrowane algorytmem AES-256-CBC są kodowane w Base64 przed wysłaniem, zaszyfrowane klucze (encryptedSymmetricKey) - klucze AES zaszyfrowane algorytmem RSA-OAEP są kodowane w Base64, wektory inicjalizacyjne (initVector) - IV są kodowane w Base64, podpisy cyfrowe (SignatureValue) - wartości podpisów XAdES są kodowane w Base64, certyfikaty (KeyInfo) - certyfikaty X.509 mogą być kodowane w Base64.
Rozmiar pliku a Base64
Kodowanie Base64 zwiększa rozmiar pliku o około 33% (4 znaki Base64 reprezentują 3 bajty binarne). Ważne dla KSeF API: encryptedInvoiceSize odnosi się do rozmiaru binarnego pliku zaszyfrowanego, nie rozmiaru ciągu Base64. Jeśli plik jest kodowany w Base64 przed wysłaniem, rozmiar Base64 jest większy, ale encryptedInvoiceSize nadal odnosi się do rozmiaru binarnego. Błąd 'Content length does not match the file size' oznacza, że podany rozmiar nie odpowiada rzeczywistemu rozmiarowi przesłanego pliku.
Jak obliczyć rozmiar po kodowaniu Base64?
Rozmiar pliku po kodowaniu Base64 można obliczyć: rozmiar binarny × 4/3 (z zaokrągleniem w górę). Przykład: plik binarny 300 bajtów → Base64 około 400 znaków. W KSeF API, przy wysyłaniu faktury, musisz podać rozmiar binarnego pliku zaszyfrowanego (encryptedInvoiceSize), nie rozmiar Base64. System automatycznie dekoduje Base64 i weryfikuje rozmiar binarnego pliku.
FAQ
Czy encryptedInvoiceSize to rozmiar Base64?
Nie, encryptedInvoiceSize to rozmiar binarnego pliku zaszyfrowanego w bajtach, nie rozmiar ciągu Base64. Jeśli plik jest kodowany w Base64 przed wysłaniem, rozmiar Base64 jest większy (około 33% większy), ale encryptedInvoiceSize nadal odnosi się do rozmiaru binarnego pliku zaszyfrowanego.
Dlaczego otrzymuję błąd 'Content length does not match the file size'?
Błąd oznacza, że podany rozmiar (encryptedInvoiceSize) nie odpowiada rzeczywistemu rozmiarowi przesłanego pliku. Sprawdź, czy używasz rozmiaru binarnego pliku zaszyfrowanego, nie rozmiaru Base64. Zweryfikuj, czy rozmiar odpowiada rzeczywistemu rozmiarowi przesłanego pliku.
Jak obliczyć rozmiar po kodowaniu Base64?
Rozmiar pliku po kodowaniu Base64 można obliczyć: rozmiar binarny × 4/3 (z zaokrągleniem w górę). Przykład: plik binarny 300 bajtów → Base64 około 400 znaków. W KSeF API, przy wysyłaniu faktury, musisz podać rozmiar binarnego pliku zaszyfrowanego (encryptedInvoiceSize), nie rozmiar Base64.
Dlaczego Base64 zwiększa rozmiar pliku?
Base64 używa 64 znaków ASCII do reprezentowania danych binarnych. 4 znaki Base64 reprezentują 3 bajty binarne, więc rozmiar zwiększa się o około 33% (4/3 = 1.33). To jest konieczne, ponieważ protokoły tekstowe (HTTP, XML, JSON) nie mogą bezpośrednio przesyłać danych binarnych.