C語言實現base64編譯碼函式

2021-10-08 09:45:56 字數 1981 閱讀 1322

//

// 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表中得到...