Tech Help

რატომ ხდის Base64 ფაილებს უფრო დიდს?

Base64 ჩვეულებრივ ორობით მონაცემს დაახლოებით ერთი მესამედით ადიდებს. ნახე 3 ბაიტიდან 4 სიმბოლოზე სტრუქტურა, შევსება, Data URL დამატებითი ხარჯი და როდის ღირს ეს ზომა.

მოკლე პასუხი

Base64 ჩვეულებრივ ორობით მონაცემს დაახლოებით ერთი მესამედით ადიდებს, რადგან ყოველ 3 ბაიტ ორობით მონაცემს 4 დასაბეჭდ Base64 სიმბოლოთი წარმოადგენს.

თუ შეყვანის სიგრძე 3-ის ზუსტი ჯერადი არ არის, სტანდარტულ შევსებულ Base64-ს შეუძლია = სიმბოლოები დაამატოს. კოდირებული სიგრძეა 4 × ceil(n / 3), სადაც n არის ორიგინალი ბაიტის სიგრძე.

«დაახლოებით 33%» დიდ შეყვანებს აღწერს. ძალიან პატარა შეყვანებზე პროცენტი შევსების გამო გაცილებით დიდი ჩანს. Base64 შეკუმშვა არ არის. კოდირებისა და შიფრაციისთვის იხილე [არის Base64 შიფრაცია? რა არის Base64?](/ka/story/base64-is-not-encryption).

ეს სტატია ხსნის, რატომ არის Base64 გამოსავალი ორიგინალ ბაიტებზე დიდი. ეს უსაფრთხოების გზამკვლევი არ არის. თუ კოდირება შიფრაციის წინააღმდეგ გჭირდება, გამოიყენე არის Base64 შიფრაცია? რა არის Base64?.

რატომ სჭირდება Base64-ს მეტი ადგილი?

3 ბაიტი არის 24 ბიტი. Base64 ამ 24 ბიტს 6 ბიტიან 4 ჯგუფად ყოფს. თითოეული ჯგუფი ერთ Base64 სიმბოლოზე აისახება, ამიტომ 3 შეყვანის ბაიტი 4 გამოსავლის სიმბოლო ხდება. ASCII სიმბოლოზე 1 ბაიტად შენახვისას ეს არის 4 / 3 ≈ 1.333 — დაახლოებით 33.3% ზრდა.

  • 3 ბაიტი (24 ბიტი)
  • გაყავი 6 ბიტიან 4 ჯგუფად
  • თითოეული ჯგუფი → ერთი Base64 სიმბოლო
  • 4 სიმბოლო (ხშირად 4 ბაიტი ტექსტი)
3 ბაიტი → 4 სიმბოლო ნაბიჯი ზომის ხარჯია. შევსებას შეუძლია ცოტა მეტი დაამატოს მოკლე შეყვანებზე.

მარტივი, შესამოწმებელი მაგალითი

ეს კოდირებები ემთხვევა სტანდარტულ შევსებულ Base64-ს.

Man

Man

Base64

TWFu

Man არის 3 UTF-8/ASCII ბაიტი. TWFu არის 4 სიმბოლო: 3 → 4.

Hello

Hello

Base64

SGVsbG8=

Hello არის 5 ბაიტი. SGVsbG8= არის 8 სიმბოლო, ერთი = ჩათვლით. პატარა მონაცემზე შევსება პროცენტს 33%-ზე დიდს აჩვენებს.

როგორ ითვლება Base64 ზომა?

სტანდარტული შევსებული Base64-ისთვის encodedLength = 4 × ceil(originalBytes / 3).

ორიგინალი ბაიტები Base64 სიმბოლოები
14
24
34
48
58
68

1 ან 2 ბაიტი მაინც 4 სიმბოლოს იძლევა. გამოიყენე ფორმულა, არა ფიქსირებული 33%.

რას ნიშნავს «=» შევსება?

= ნიშანი აჩვენებს, რომ ბოლო 3-ბაიტიანი ბლოკი სავსე არ იყო. 1 შეყვანის ბაიტი ორ = სიმბოლოს იყენებს; 2 ბაიტი ერთს; 3 ბაიტი არცერთს. შევსება შიფრაცია ან უსაფრთხოების ფუნქცია არ არის.

Base64URL ნაკლებ ადგილს იკავებს?

Base64URL + ნიშანს - თი ცვლის და / ნიშანს _ თი, და Base64 კოდირება კოდირებისას ბოლო = ტოვებს. ამან შეიძლება სტრიქონი იმ = სიმბოლოებით შეამოკლოს. 3 ბაიტი → 4 სიმბოლო სტრუქტურა იგივე რჩება, ამიტომ Base64URL უფრო ადგილმომგებიანი ორობითი ფორმატი არ არის.

რატომ შეიძლება ძალიან პატარა შეყვანები 33%-ზე მეტით გაიზარდოს?

1 ბაიტი → 4 სიმბოლო სიგრძეში 300% ზრდაა. 2 ბაიტი → 4 არის 100%. 3 ბაიტი → 4 დაახლოებით 33.3%. n-ის ზრდასთან შევსება ნაკლებად მნიშვნელოვანია და ზედმეტი ხარჯი დაახლოებით 33%-ს უახლოვდება. Base64 ყოველთვის ზუსტად 33%-ით დიდი არ არის.

რატომ არის Base64 Data URL კიდევ უფრო დიდი?

Data URL ტვირთის წინ ამატებს პრეფიქსს, როგორიცაა data:image/png;base64,. ძალიან პატარა ფაილზე ეს პრეფიქსი პროცენტს შეიძლება დომინირებდეს. Base64 კოდირება შეიძლება გასცეს ნედლი Base64 ან Data URL; Data URL გამოსავალი სტანდარტულ ანბანს იყენებს.

Base64 ორობითის წინააღმდეგ: რომელი უფრო პატარაა?

ნედლი ორობითი უფრო ადგილმომგებიანია ტრანსპორტისა და შენახვისთვის. Base64 უფრო დიდია, მაგრამ ტექსტ-უსაფრთხო JSON-ში, ელფოსტაში და სხვა მხოლოდ-ტექსტ გზებზე. ორობითიდან ტექსტზე კოდირებაა, არა შეკუმშვა.

Base64 ფაილებს კუმშავს?

არა. Base64 შეკუმშვის ფორმატი არ არის. კოდირებული ტექსტი ჩვეულებრივ ორიგინალ ბაიტებზე დიდია. თუ შემდეგ იმ ტექსტზე gzip ან Brotli გამოიყენებ, ზოგი სიჭარბე შეიძლება შემცირდეს — შედეგი მონაცემსა და შემკუმშავზეა დამოკიდებული. gzip Base64 ზედმეტ ხარჯს სრულად არ შლის.

რა ხდება, თუ Base64 gzip-დება?

HTTP შეკუმშვას შეუძლია Base64 ტექსტში ზოგი გამეორებული ნიმუში შეამციროს. JPEG, PNG ან ZIP ხშირად ცუდად იკუმშება ნედლ ბაიტადაც, და Base64-შემდეგ-gzip ჯერ კიდევ შემთხვევაზეა დამოკიდებული. gzip-ის შემდეგ უნივერსალური დამატებითი პროცენტი არ არსებობს.

ფაილები Base64-ად უნდა შეინახო?

Base64-ს შეუძლია ორობითი JSON ველში, პატარა ჩაშენებულ რესურსში, მხოლოდ-ტექსტ API-ში, კოპირება/ჩასმაში ან Data URL-ში ჩასვას. დიდ ფაილებზე შენახვა, მეხსიერება და ტვირთის ზომა ყველა იზრდება. ეს არ ნიშნავს «არასოდეს გამოიყენო Base64 ფაილებისთვის».

რატომ არის Base64 გავრცელებული JSON API-ებში?

JSON-ს არ აქვს მშობლიური ნედლ-ორობითი ტიპი, ამიტომ API-ები ხშირად ბაიტებს Base64 სტრიქონში დებენ. დიდი ფაილებისთვის multipart/form-data, ობიექტის საცავი ან პირდაპირი ორობითი ატვირთვა უკეთ მოერგოს. არცერთი არჩევანი ყოველთვის საუკეთესო არ არის.

რატომ გამოიყენება Base64 ელფოსტაში?

MIME-ს შეუძლია Base64 გამოიყენოს, რომ ორობითი დანართი ტექსტ-უსაფრთხო სიმბოლოებად იმგზავროს. იგივე ზომის ზედმეტი ხარჯი მაინც მოქმედებს. ეს ტრანსპორტის წარმოდგენაა, არა უფრო პატარა ფაილი.

როდის ღირს დამატებითი ზომა?

დამატებითი ზომა შეიძლება ღირდეს, როცა ორობითი ტექსტში უნდა იჯდეს, ტვირთი პატარაა, API Base64-ს მოითხოვს, ან Data URL გჭირდება. დიდი მედიისთვის უპირატესობა მიენიჭე ნედლ ორობითს, როცა სისტემა ნებას რთავს.

როდის უნდა აირიდო Base64?

გამოტოვე დიდ ფაილებზე, ვიწრო გამტარუნარიანობაზე, ხშირ გადაცემებზე, ან როცა ორობითი გზა უკვე არსებობს — სიტუაციურია, არა «Base64 ცუდი პრაქტიკაა».

შევსებული Base64 სიგრძეები, რომელთა შემოწმება შეგიძლია

ორიგინალი ბაიტების რაოდენობა და სტანდარტული შევსებული Base64 სიმბოლოების რაოდენობა:

ორიგინალი ბაიტები Base64 სიმბოლოები
14
24
34
1016
100136
1,0001,336

ყველა მწკრივი მიჰყვება 4 × ceil(n / 3). ეს Base64 სიმბოლოების რაოდენობაა.

მაგალითი: რა ზომის იქნება 1,000 ბაიტიანი ფაილი?

4 × ceil(1000 / 3). ceil(333.333…) = 334, და 4 × 334 = 1336. ამიტომ 1,000 ბაიტი ხდება 1,336 Base64 სიმბოლო. UTF-8/ASCII-ად შენახვისას თითოეული სიმბოლო ჩვეულებრივ 1 ბაიტია — 1,336 არ ჩათვალო ზუსტ მეხსიერების ბაიტების რაოდენობად.

შეიძლება Base64-მა მეტი მეხსიერება გამოიყენოს, ვიდრე ფაილის ზომა გვთავაზობს?

ზოგი გარემო სტრიქონებს სიმბოლოზე 1 ბაიტზე მეტით ინახავს, და კოდირება/დეკოდირება შეიძლება ბუფერსა და სტრიქონს ერთად ინახავდეს. მეხსიერების გამოყენება ზუსტად სიმბოლოების სიგრძე არ არის.

მარტივი გადაწყვეტილების გზამკვლევი ზომისთვის

თუ სისტემა ნედლ ორობითს იღებს, ზომისთვის მას უპირატესობა მიანიჭე. თუ მხოლოდ ტექსტია ნებადართული, Base64 შეიძლება მოერგოს. დიდ ტვირთზე შეამოწმე ორობითი ატვირთვის გზა. URL-უსაფრთხო ტექსტისთვის განიხილე Base64URL — 3-დან 4-ზე გაფართოება რჩება.

  • ორობითი მონაცემის გაგზავნაა საჭირო
  • ნედლი ორობითი ნებადართულია? ზომისთვის უპირატესობა ორობითს
  • მხოლოდ-ტექსტ ველი? Base64 შეიძლება შესაფერისი იყოს
  • დიდი ტვირთი? შეამოწმე ორობითი ატვირთვის გზა
  • URL-უსაფრთხო ტექსტი გჭირდება? განიხილე Base64URL
  • დიდ შეყვანებზე დაახლოებით 33% მეტი ტექსტი ელოდე
Base64 ტექსტურ თავსებადობას ყიდულობს. უფრო პატარა ფაილს არ ყიდულობს.
Base64 ადგილს ტექსტურ თავსებადობაზე ცვლის

Base64 მონაცემის დასაპატარავებლად არ არის შექმნილი. ორობითის ტექსტურ სისტემებში წარმოდგენას უადვილებს, ხარჯი კი დამატებითი ზომაა.

დააკოდირე ან დეკოდირე Base64 ბრაუზერში

NEXNARA Base64 კოდირება ტექსტს კოდავს და დეკოდავს, და შეუძლია ფაილი Base64 ან Data URL გახადოს და Base64 ისევ ფაილად დააბრუნოს.

ტექსტი UTF-8 ბაიტებს იყენებს, შემდეგ Base64-ს — არა მხოლოდ ASCII-ს. აირჩიე Standard ან Base64URL. ფაილის გამოსავალი შეიძლება იყოს ნედლი Base64 ან Data URL (სტანდარტული ანბანი). არასწორი შეყვანა უარყოფილია. არა-UTF-8 ბაიტებს ფაილი სჭირდება, არა ტექსტის დეკოდი.

10 MB-ზე დიდმა ფაილებმა შეიძლება ჩანართი შეანელოს (გაფრთხილება). 32 MB-ზე დიდი ფაილები იბლოკება.

კოდირება და დეკოდირება შენს ბრაუზერში ხდება. ამ ხელსაწყოსთვის ფაილი NEXNARA სერვერზე არ იგზავნება. რეკლამები და საიტის სხვა ფუნქციები კვლავ იყენებენ ქსელს.

ჩასვი ტექსტი ან ფაილი Base64 კოდირება-ში და შეადარე ორიგინალი ბაიტები კოდირებულ სიგრძეს.

FAQ

რატომ ზრდის Base64 ფაილის ზომას?

3 ბაიტს (24 ბიტი) 4 სიმბოლოზე ასახავს (4 × 6 ბიტი). ტექსტად შენახვისას ეს დიდ შეყვანებზე დაახლოებით ერთი მესამედით მეტია.

Base64 ყოველთვის 33%-ით დიდია?

არა. დიდი შეყვანები დაახლოებით 33.3%-ს უახლოვდება. ძალიან პატარა შეყვანები შევსების გამო მეტად შეიძლება გაიზარდოს. გამოიყენე 4 × ceil(n / 3).

რამდენად დიდია Base64 ორობითთან შედარებით?

სტანდარტული შევსებული სიგრძეა 4 × ceil(n / 3) სიმბოლო. Data URL პრეფიქსი მეტს ამატებს.

Base64 შეკუმშვა ამცირებს ფაილის ზომას?

Base64 არ კუმშავს. gzip ან Brotli კოდირებულ ტექსტზე შეიძლება ნაწილი შეამციროს; ზედმეტ ხარჯს ყველა შემთხვევაში არ შლის.

Base64URL ნაკლებ ადგილს იკავებს?

შეიძლება = შევსება ჩამოაგდოს, ამიტომ სტრიქონი 0–2 სიმბოლოთი მოკლე იყოს. 3-დან 4-ზე კოდირების სტრუქტურა იგივეა.

დიდი ფაილებისთვის Base64 უნდა გამოვიყენო?

მხოლოდ თუ ტექსტი გჭირდება. დიდ ან ხშირ გადაცემებზე ორობითი გზა ხშირად უფრო პატარაა. Base64 API-ებში ყოველთვის არასწორი არ არის.

Tech Help

არის Base64 შიფრაცია? რა არის Base64?

არა. Base64 კოდირებაა. მისი დეკოდირება ადვილია და პაროლების ან საიდუმლოების დასაცავად არ უნდა იქნას გამოყენებული. რატომ არის Base64 უფრო დიდი?

Tech Help

რატომ არის ჩემი PDF ასე დიდი? 7 მიზეზი და როგორ დავაპატარაოთ

გაიგეთ, რატომ არის PDF ფაილი დიდი და როგორ შეამციროთ ზომა ხარისხის უსარგებლოდ შეწირვის გარეშე.

Tech Help

რატომ არის ჩემი PNG ფაილი ასე დიდი? როგორ შევამციროთ დაუზიანებლად

PNG შეიძლება იყოს დიდი, რადგან არის lossless და შეუძლია გამჭვირვალობის შენახვა. შეკუმშეთ PNG, საჭიროების შემთხვევაში შეცვალეთ ზომა ან გადაიყვანეთ ფოტოები JPEG ან WebP-ში.

Tech Help

JPG vs PNG ეკრანის სურათებისთვის: რომელი უფრო პატარაა?

აირჩიე JPG ან PNG ეკრანის სურათისთვის შინაარსის მიხედვით: UI და ტექსტი ხშირად უფრო მკვეთრი რჩება PNG-ში; ფოტოებით სავსე კადრები შეიძლება უფრო პატარა იყოს JPEG-ში.

Tech Help

რატომ ამბობს JSON.parse "Unexpected token"-ს?

JSON.parse ისვრის Unexpected token-ს, როცა ტექსტი სწორი JSON არ არის. გაასწორეთ ცალმხრივი ბრჭყალები, ბოლო მძიმეები, HTML პასუხები და შეცდომის პოზიცია.