Article View: alt.pl.fan.gopher
Article #14103Re: B64
From: Adam Wysocki
Date: Sun, 16 Feb 2003 23:36
Date: Sun, 16 Feb 2003 23:36
81 lines
3412 bytes
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!gophiReferences:
<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