🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.fan.gopher
Article #14103

Re: B64

#14103
From: Adam Wysocki
Date: Sun, 16 Feb 2003 23:36
81 lines
3412 bytes
16.02.03 Puck wrote:

> Ave! 
> Jak właściwie działa Base64? Mi po głowie majaczy
> się następujący algorytm: bity sa grupowane po sześć,
> co daje nam maksymalną wartość 63 (+0 = 64). Do każ-
> dej wartości przypisany jest znak ascii: [A-Za-z0-9+/]. 
> Dobrze kombinuję?

Dobrze. Kawałek kodu apcohdecodera poniżej.

#v+
/*
 b64()

 b64-uje. nie alokuje.
*/

void b64 (char *newbuf, char *oldbuf, long len)
{
 char bits[24];
 long pos = 0;
 long newpos = 0;
 int i, m, bindex;
 int availbits;
 int tabindex;
 static char b64tab[] = "ABCDEFGHIJKLMNOPQRST\
UVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 while (pos < len)
 {
  if ((pos + 3) <= len)
   bin (bits, oldbuf + pos, 3), pos += 3, availbits = 24;
  else
   if ((len - pos) == 1)
    availbits = 8,
    memset (bits, '0', 24), bin (bits, oldbuf + pos, 1), pos = len;
   else
    availbits = 16,
    memset (bits, '0', 24), bin (bits, oldbuf + pos, 2), pos = len;
  bindex = 0;
  if (availbits == 24)
   for (m = 0; m < 4; m++)
   {
    tabindex = 0;
    for (i = 0; i < 6; i++)
     tabindex |= (bits[bindex++] - '0') << (5 - i);
    newbuf[newpos++] = b64tab[tabindex];
   }
  else
   if (availbits == 8)
   {
    for (m = 0; m < 2; m++)
    {
     tabindex = 0;
     for (i = 0; i < 6; i++)
      tabindex |= (bits[bindex++] - '0') << (5 - i);
     newbuf[newpos++] = b64tab[tabindex];
    }
    newbuf[newpos++] = '=', newbuf[newpos++] = '=';
   } 
   else
   {
    for (m = 0; m < 3; m++)
    {
     tabindex = 0;
     for (i = 0; i < 6; i++)
      tabindex |= (bits[bindex++] - '0') << (5 - i);
     newbuf[newpos++] = b64tab[tabindex];
    }
    newbuf[newpos++] = '=';
   }
 }
}
#v-

-- 
W tle leci: Depeche Mode - Somebody

Pozdrowienia z Warszawy * Adam `gophi' Wysocki * gophi@studio.tpi.pl
GG# 1234 * RLU# 265791 * ICQ# 173653642 * GSM# +48505439030 * CB# 33
gophi jesteś nienetetyczny (C) TheDude o moim podejściu do netykiety
Technical Details
Message-ID: <gophi.66903@nascom.nasa.gov>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.atman.pl!newsfeed.gazeta.pl!news.atcom.net.pl!wysocki.lodz.pdi.net!gophi.nascom.nasa.gov!gophi
References: <20030216.13036@news.blade.net>

Show Full Headers
Complete Article Headers
Newsgroups: alt.pl.fan.gopher
Subject: Re: B64
Date: Mon, 17 Feb 2003 00:36:28 +0100
Lines: 82
References: <20030216.13036@news.blade.net>
Mime-Version: 1.0
X-Trace: localhost.localdomain 1045438589 2419 127.0.0.1 (16 Feb 2003 23:36:28 GMT)
NNTP-Posting-Date: Sun, 16 Feb 2003 23:36:28 +0000 (UTC)
In-Reply-To: <20030216.13036@news.blade.net>
From: Adam Wysocki <adam@wysocki.lodz.pdi.net>
Organization: PFT Hacking Group
NNTP-Posting-Host: gophi.nascom.nasa.gov
X-Complaints-To: news@aramin.one.pl
User-Agent: Pine 4.44 / Red Hat Linux 7.3 (Valhalla) / Kernel 2.4.18-3
X-Geek-Code-1: GAT d? s+: a1985 C++ UL+++ P+ L+++ E---- W- N++ K- w--- !O M--
X-Geek-Code-2: V-- PS+ PE+ Y-- PGP- t- !5 X+ R- tv- b+ DI- D+ G e- h* r% y*
X-Geek-Code-3: v3.12
X-License: This message is PPL-Licensed, details on http://ppl.7thGuard.net/
X-Hardcore-User: pine
X-Apcoh-Pomidor-Member: yes
X-No-Archive: yes
X-Uwaga: O ile nie jest zaznaczone inaczej, poglady wyrazone przeze mnie          sa moimi wlasnymi pogladami i moga, ale nie musza, byc zgodne          z pogladami moich bylych, obecnych oraz przyszlych pracodawcow.
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.atman.pl!newsfeed.gazeta.pl!news.atcom.net.pl!wysocki.lodz.pdi.net!gophi.nascom.nasa.gov!gophi
Message-ID: <gophi.66903@nascom.nasa.gov>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit