//
// base64.c
// base64
//// created by guofu on 2017/5/25.
///**
* 轉解碼過程
* 3 * 8 = 4 * 6; 3位元組佔24位, 4*6=24
* 先將要編碼的轉成對應的ascii值
* 如編碼: s 1 3
* 對應ascii值為: 115 49 51
* 對應二進位制為: 01110011 00110001 00110011
* 將其6個分組分4組: 011100 110011 000100 110011
* 而計算機是以8bit儲存, 所以在每組的高位補兩個0如下:
* 00011100 00110011 00000100 00110011對應:28 51 4 51
* 查詢base64 轉換表 對應 c z e z
* * 解碼
* c z e z
* 對應ascii值為 99 122 69 122
* 對應表base64_suffix_map的值為 28 51 4 51
* 對應二進位制值為 00011100 00110011 00000100 00110011
* 依次去除每組的前兩位, 再拼接成3位元組
* 即: 01110011 00110001 00110011
* 對應的就是s 1 3
*/#include "base64.h"
#include #include // base64 轉換表, 共64個
static const char base64_alphabet = ;
// 解碼時使用
static const unsigned char base64_suffix_map[256] = ;
static char cmove_bits(unsigned char src, unsigned lnum, unsigned rnum)
int base64_encode(const unsigned char *indata, int inlen, char *outdata, int *outlen)
int in_len = 0; // 源字串長度, 如果in_len不是3的倍數, 那麼需要補成3的倍數
int pad_num = 0; // 需要補齊的字元個數, 這樣只有2, 1, 0(0的話不需要拼接, )
if (inlen % 3 != 0)
in_len = inlen + pad_num; // 拼接後的長度, 實際編碼需要的長度(3的倍數)
int out_len = in_len * 8 / 6; // 編碼後的長度
char *p = outdata; // 定義指標指向傳出data的首位址
//編碼, 長度為調整後的長度, 3位元組一組
for (int i = 0; i < in_len; i+=3) else if (pad_num == 2)
} else
p += 4;
indata += 3;
}if(outlen != null)
return ret;
}int base64_decode(const char *indata, int inlen, char *outdata, int *outlen)
if (inlen % 4 != 0)
int t = 0, x = 0, y = 0, i = 0;
unsigned char c = 0;
int g = 3;
while (indata[x] != 0) // 對應的值是'='
t = (t<<6) | c; // 將其依次放入乙個int型中佔3位元組
if (++y == 4)
}if (outlen != null)
return ret;
}
Base64 編譯碼C語言實現
本文繼續前文 http blog.csdn.net hegch archive 2009 05 01 4141125.aspx 前文講述了如何實現base64的編碼,本文給出解碼的 這裡給出的 是整個完整的編碼和解碼,將加密之後的串解密得到原來的字串。具體 如下 這裡新增了兩個方法find pos和...
C語言實現Base64編碼 解碼
bse64是一種以64個可列印字元對二進位制資料進行編碼的編碼演算法。base64在對資料進行編碼時以三個8位字元型資料為一組,取這三個字元型資料的ascii碼,然後以6位為一組組成4個新的資料,這4個新的資料有6位,所以它的最大值為2 6 64。我們以4個6位資料的十進位制數從base64表中得到...
C語言實現Base64編碼 解碼
bse64是一種以64個可列印字元對二進位制資料進行編碼的編碼演算法。base64在對資料進行編碼時以三個8位字元型資料為一組,取這三個字元型資料的ascii碼,然後以6位為一組組成4個新的資料,這4個新的資料有6位,所以它的最大值為2 6 64。我們以4個6位資料的十進位制數從base64表中得到...