Base64算法原理

Base64算法将输入的字符串或一段数据编码成只含有{''A''-''Z'', ''a''-''z'', ''0''-''9'', ''+'', ''/''}这64个字符的串，''=''用于填充。其编码的方法是，将输入数据流每次取6 bit，用此6 bit的值(0-63)作为索引去查表，输出相应字符。这样，每3个字节将编码为4个字符(3×8 → 4×6)；不满4个字符的以''=''填充。

00001
00013 #include <ctype.h>
00014
00015
00016 static const char base64digits[] =
00017    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
00018
00020 static const char base64val[] = {
00025     BAD,  0,  1,  2,   3,  4,  5,  6,   7,  8,  9, 10,  11, 12, 13, 14,
00027     BAD, 26, 27, 28,  29, 30, 31, 32,  33, 34, 35, 36,  37, 38, 39, 40,
00029 };
00030 #define DECODE64(c)  (isascii(c) ? base64val[c] : BAD)
00031
00039 void to64frombits(unsigned char *out, const unsigned char *in, int inlen)
00040 {
00041         for (; inlen >= 3; inlen -= 3)
00042         {
00043                 *out++ = base64digits[in[0] >> 2];
00044                 *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
00045                 *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
00046                 *out++ = base64digits[in[2] & 0x3f];
00047                 in += 3;
00048         }
00049
00050         if (inlen > 0)
00051         {
00052                 unsigned char fragment;
00053
00054                 *out++ = base64digits[in[0] >> 2];
00055                 fragment = (in[0] << 4) & 0x30;
00056
00057                 if (inlen > 1)
00058                         fragment |= in[1] >> 4;
00059
00060                 *out++ = base64digits[fragment];
00061                 *out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c];
00062                 *out++ = '=';
00063         }
00064
00065         *out = '/0';
00066 }
00067
00075 int from64tobits(char *out, const char *in)
00076 {
00077         int len = 0;
00078         register unsigned char digit1, digit2, digit3, digit4;
00079
00080         if (in[0] == '+' && in[1] == ' ')
00081                 in += 2;
00082         if (*in == '/r')
00083                 return(0);
00084
00085         do {
00086                 digit1 = in[0];
00088                         return(-1);
00089                 digit2 = in[1];
00091                         return(-1);
00092                 digit3 = in[2];
00093                 if (digit3 != '=' && DECODE64(digit3) == BAD)
00094                         return(-1);
00095                 digit4 = in[3];
00096                 if (digit4 != '=' && DECODE64(digit4) == BAD)
00097                         return(-1);
00098                 in += 4;
00099                 *out++ = (DECODE64(digit1) << 2) | (DECODE64(digit2) >> 4);
00100                 ++len;
00101                 if (digit3 != '=')
00102                 {
00103                         *out++ = ((DECODE64(digit2) << 4) & 0xf0) | (DECODE64(digit3) >> 2);
00104                         ++len;
00105                         if (digit4 != '=')
00106                         {
00107                                 *out++ = ((DECODE64(digit3) << 6) & 0xc0) | DECODE64(digit4);
00108                                 ++len;
00109                         }
00110                 }
00111         } while (*in && *in != '/r' && digit4 != '=');
00112
00113         return (len);
00114 }

• 本文已收录于以下专栏：

Base64算法 编码过程和原理

Base64的算法底层原理是怎样的。它的计算过程又是如何。通过这篇文章我们可以了解这些，甚至手算编码。...
• U2U22
• 2016年08月24日 10:40
• 861

Base64编解码原理及AES加解密算法的使用

Base64编解码 1英文字符=1字节=8位 Base64编码原理：将要编码的二进制（字符串、图片等都可以转换成二进制格式表示）以6位为一组，然后每组都转换成一个单独的数字并映射到base64码表中的...

BASE64 加密算法、原理 各种语言实现算法

• lgh1117
• 2012年05月25日 15:28
• 5658

UUENCODE_Base64编码解码原理源码 VB6

• 2016年12月11日 00:10
• 3KB
• 下载

Base64编码解码原理及实现

• 2011年11月01日 21:15
• 140KB
• 下载

Base64 加密算法

• 2008年08月01日 01:34
• 3KB
• 下载

举报原因： 您举报文章：Base64算法原理 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)