Base64原理和實現

xshlife2發表於2020-12-23

Base64已經成為網路上常見的傳輸8bit位元組的編碼方式之一。一般在做資料的傳輸時,系統之間的報文互動都需要使用Base64對明文進行編碼,然後再進行加密,最後才傳輸。那麼Base64的作用是什麼?

在資料傳輸時經常遇到一類情況:使用全ASCII英文字母沒問題,但是涉及中文就會亂碼,或者網路傳輸的字元並不完全時可列印的字元,如二進位制檔案、圖片等。Base64就是為了解決此問題,它是基於64個可列印的字元來表示二進位制的資料的一種方法。

電子郵件剛問世時,只能傳輸英文,但後來隨著使用者增加,中文、日文等文字也有需求,但這些字元並不能被伺服器或閘道器有效處理,這時候Base64就登場了。之後,Base在URL、Cookie、網頁傳輸小二進位制檔案也由廣泛使用。

Base64 編碼原理
Base64的原理比較簡單,Base64演算法中通常都會定義一個類似這樣的陣列:

cpp
[‘A’, ‘B’, ‘C’, … ‘a’, ‘b’, ‘c’, … ‘0’, ‘1’, … ‘+’, ‘/’]
Base64的字元索引表如下:

Base64字元索引表
Base64字元索引表

以上字符集選用了A-Z、a-z、0-9、+、/ 64個可列印字元,這是標準的Base64協議規定。在平時使用中我們還會看到=或==號出現在Base64的編碼結果中,=在此是作為填充字元出現,下面會提到。

具體轉換步驟

步驟1:將待轉換的字串每3個位元組分為一組,每個位元組佔用8bit,總共佔用24bit。

步驟2:將總的24bit每6bit分為一組,共分為4組。

步驟3:在每組前面新增兩個0,每組由6bit變為8bit二進位制位,共32bit,即4個位元組。

步驟4:根據Base64編碼對照表獲得對應的值。

從上面的步驟中可發現:

Base64字元表中的字元原本用6個bit就可以表示,現在前面新增了2個0,變為8bit,會造成一定浪費。Base64編碼後的字串,比原文大約大三分之一。

為什麼使用3個位元組一組呢?因為6和8的最小公倍數是24,三個位元組正好24個二進位制位,每6bit一組,恰好能夠分為4組。

Base64 示例說明
從下圖為例,具體分析Base64編碼過程。

Base64編碼1
Base64編碼1

第一步:M、a、n對應的ASCII碼分別是77、97、110。對應的二進位制分別是01001101、01100001、01101110。如圖第二三行所示,由此組成一個24位的二進位制字串。

第二部:將24位每6位分成一組,共四組。

第三步:上面4組每一組前面補兩個0,擴充套件成32個二進位制位,此時變成4個位元組:00010011、00010110、00000101、00101110。分別對應的值(如圖Base64編碼索引)為:19、22、5、46。

第四步:用上面的值在Base64編碼表中進行查詢,分別對應:T、W、F、u。因此字串Man通過Base64編碼之後就變為TWFu。

位數不足情況

上面是按照三個位元組來舉例說明的,如果位元組數不足3個,如何處理?

Base64編碼2
Base64編碼2

兩個位元組:兩個位元組共16位二進位制,依舊按照規則進行分組。此時共16個bit位,每6個一組,則第三組缺少兩位用0補齊,得到三個Base64編碼,第四組完全沒有資料則用“=”補上。因此,上圖中字串“BC”通過Base64編碼後為“QKM=”。

一個位元組:一個位元組共8個二進位制位,依舊按照規則進行分組。此時共8個bit位,每6個一組,則第二組缺少4位,用0補齊,得到兩個Base64編碼,而後面兩組沒有對應資料都用“=”補上。因此,上圖中“A”轉換之後為“QQ==”。

注意事項

大多數編碼都是由字串轉化成二進位制的過程,而Base64的編碼則是從二進位制轉換為字串。與常規恰恰相反,Base64編碼主要用在傳輸、儲存、表示二進位制領域,不能算得上加密,只是無法直接看到明文。也可以通過打亂Base64編碼來進行加密。
中文有多種編碼(例如utf-8、gb2312、gbk等),不同編碼對應Base64編碼結果不一樣。
延伸

上面已經看到了Base64就是用6位(2的6次冪就是64)表示字元,因此成為Base64。同理,Base32就是用5位,Base16就是用4位。都可以按照上面的步驟進行演化。

Base64 詳細實現
Base64.h

cpp
#pragma once
#include

class CBase64
{
public:
public:
CBase64();
~CBase64();

/*編碼
DataByte
[in]輸入的資料長度,以位元組為單位
*/
std::string Encode(const char *Data, int DataByte);

/*解碼
DataByte
[in]輸入的資料長度,以位元組為單位
OutByte
[out]輸出的資料長度,以位元組為單位,請不要通過返回值計算
輸出資料的長度
*/
std::string Decode(const char *Data, int DataByte, int &OutByte);

};
Base64.cpp

cpp
#include “Base64.h”

CBase64::CBase64(){}

CBase64::~CBase64(){}

std::string CBase64::Encode(const char *Data, int DataByte)
{
//編碼表
const char EncodeTable[] = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;
//返回值
std::string strEncode;
unsigned char Tmp[4] = {0};
int LineLength = 0;
for (int i = 0; i < (int)(DataByte / 3); i++)
{
Tmp[1] = *Data++;
Tmp[2] = *Data++;
Tmp[3] = *Data++;
strEncode += EncodeTable[Tmp[1] >> 2];
strEncode += EncodeTable[((Tmp[1] << 4) | (Tmp[2] >> 4)) & 0x3F];
strEncode += EncodeTable[((Tmp[2] << 2) | (Tmp[3] >> 6)) & 0x3F];
strEncode += EncodeTable[Tmp[3] & 0x3F];
if (LineLength += 4, LineLength == 76)
{
strEncode += “\r\n”;
LineLength = 0;
}
}
//對剩餘資料進行編碼
int Mod = DataByte % 3;
if (Mod == 1)
{
Tmp[1] = *Data++;
strEncode += EncodeTable[(Tmp[1] & 0xFC) >> 2];
strEncode += EncodeTable[((Tmp[1] & 0x03) << 4)];
strEncode += “==”;
}
else if (Mod == 2)
{
Tmp[1] = *Data++;
Tmp[2] = *Data++;
strEncode += EncodeTable[(Tmp[1] & 0xFC) >> 2];
strEncode += EncodeTable[((Tmp[1] & 0x03) << 4) | ((Tmp[2] & 0xF0) >> 4)];
strEncode += EncodeTable[((Tmp[2] & 0x0F) << 2)];
strEncode += “=”;
}

return strEncode;

}

std::string CBase64::Decode(const char *Data, int DataByte, int &OutByte)
{
//解碼錶
const char DecodeTable[] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
62, // ‘+’
0, 0, 0,
63, // ‘/’
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // ‘0’-‘9’
0, 0, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // ‘A’-‘Z’
0, 0, 0, 0, 0, 0,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // ‘a’-‘z’
};
//返回值
std::string strDecode;
int nValue;
int i = 0;
while (i < DataByte)
{
if (*Data != ‘\r’ && *Data != ‘\n’)
{
nValue = DecodeTable[*Data++] << 18;
nValue += DecodeTable[*Data++] << 12;
strDecode += (nValue & 0x00FF0000) >> 16;
OutByte++;
if (*Data != ‘=’)
{
nValue += DecodeTable[*Data++] << 6;
strDecode += (nValue & 0x0000FF00) >> 8;
OutByte++;
if (*Data != ‘=’)
{
nValue += DecodeTable[*Data++];
strDecode += nValue & 0x000000FF;
OutByte++;
}
}
i += 4;
}
else // 回車換行,跳過
{
Data++;
i++;
}
}
return strDecode;
}
測試main.cpp,假設D盤下有一張圖片為:my.png

cpp
int main()
{
ifstream inf;
inf.open(“D:\my.png”, ios::in | ios::binary);
inf.seekg(0, std::ios_base::end);
std::streampos sp = inf.tellg();
int readsize = sp;
//得到長度後,重新定位指標到檔案頭
inf.seekg(0, std::ios_base::beg);
char *readBuf = new char[readsize];
inf.read(readBuf, readsize);

CBase64 base;

std::string strData = "";
//對緩衝區編碼
strData = base.Encode((const char *)readBuf, readsize);
delete[] readBuf;
cout << strData << endl;
//對緩衝區解碼
int dataLen(0);
string strDecode = base.Decode(strData.data(), strData.size(), dataLen);

ofstream outf;
outf.open("D:\\you.png", ios::out | ios::binary);
outf.write(strDecode.data(), strDecode.size());

inf.close();
outf.close();

return 0;

}
https://github.com/users/fghdfghdf245/projects/1213
https://github.com/users/fghdfghdf245/projects/1214
https://github.com/users/fghdfghdf245/projects/1215
https://github.com/users/fghdfghdf245/projects/1216
https://github.com/users/fghdfghdf245/projects/1217
https://github.com/users/fghdfghdf245/projects/1218
https://github.com/users/fghdfghdf245/projects/1219
https://github.com/users/fghdfghdf245/projects/1220
https://github.com/users/fghdfghdf245/projects/1221
https://github.com/users/fghdfghdf245/projects/1222
https://github.com/users/fghdfghdf245/projects/1223
https://github.com/users/fghdfghdf245/projects/1224
https://github.com/users/fghdfghdf245/projects/1225
https://github.com/users/fghdfghdf245/projects/1226
https://github.com/users/fghdfghdf245/projects/1227
https://github.com/users/fghdfghdf245/projects/1228
https://github.com/users/fghdfghdf245/projects/1229
https://github.com/users/fghdfghdf245/projects/1230
https://github.com/users/fghdfghdf245/projects/1231
https://github.com/users/fghdfghdf245/projects/1232
https://github.com/users/fghdfghdf245/projects/1233
https://github.com/users/fghdfghdf245/projects/1234
https://github.com/users/fghdfghdf245/projects/1235
https://github.com/users/fghdfghdf245/projects/1236
https://github.com/users/fghdfghdf245/projects/1237
https://github.com/users/fghdfghdf245/projects/1238
https://github.com/users/fghdfghdf245/projects/1239
https://github.com/users/fghdfghdf245/projects/1240
https://github.com/users/fghdfghdf245/projects/1241
https://github.com/users/fghdfghdf245/projects/1242
https://github.com/users/fghdfghdf245/projects/1243
https://github.com/users/fghdfghdf245/projects/1244
https://github.com/users/fghdfghdf245/projects/1245
https://github.com/users/fghdfghdf245/projects/1246
https://github.com/users/fghdfghdf245/projects/1247
https://github.com/users/fghdfghdf245/projects/1248
https://github.com/users/fghdfghdf245/projects/1249
https://github.com/users/fghdfghdf245/projects/1250
https://github.com/users/fghdfghdf245/projects/1251
https://github.com/users/fghdfghdf245/projects/1252
https://github.com/users/fghdfghdf245/projects/1253
https://github.com/users/fghdfghdf245/projects/1254
https://github.com/users/fghdfghdf245/projects/1255
https://github.com/users/fghdfghdf245/projects/1256
https://github.com/users/fghdfghdf245/projects/1257
https://github.com/users/fghdfghdf245/projects/1258
https://github.com/users/fghdfghdf245/projects/1259
https://github.com/users/fghdfghdf245/projects/1260
https://github.com/users/fghdfghdf245/projects/1261
https://github.com/users/fghdfghdf245/projects/1262
https://github.com/users/fghdfghdf245/projects/1263
https://github.com/users/fghdfghdf245/projects/1264
https://github.com/users/fghdfghdf245/projects/1265
https://github.com/users/fghdfghdf245/projects/1266
https://github.com/users/fghdfghdf245/projects/1267
https://github.com/users/fghdfghdf245/projects/1268
https://github.com/users/fghdfghdf245/projects/1269
https://github.com/users/fghdfghdf245/projects/1270
https://github.com/users/fghdfghdf245/projects/1271
https://github.com/users/fghdfghdf245/projects/1272
https://github.com/users/fghdfghdf245/projects/1273
https://github.com/users/fghdfghdf245/projects/1274
https://github.com/users/fghdfghdf245/projects/1275
https://github.com/users/fghdfghdf245/projects/1276
https://github.com/users/fghdfghdf245/projects/1277
https://github.com/users/fghdfghdf245/projects/1278
https://github.com/users/fghdfghdf245/projects/1279
https://github.com/users/fghdfghdf245/projects/1280
https://github.com/users/fghdfghdf245/projects/1281
https://github.com/users/fghdfghdf245/projects/1282
https://github.com/users/fghdfghdf245/projects/1283
https://github.com/users/fghdfghdf245/projects/1284
https://github.com/users/fghdfghdf245/projects/1285
https://github.com/users/fghdfghdf245/projects/1286
https://github.com/users/fghdfghdf245/projects/1287
https://github.com/users/fghdfghdf245/projects/1288
https://github.com/users/fghdfghdf245/projects/1289
https://github.com/users/fghdfghdf245/projects/1290
https://github.com/users/fghdfghdf245/projects/1291
https://github.com/users/fghdfghdf245/projects/1292
https://github.com/users/fghdfghdf245/projects/1293
https://github.com/users/fghdfghdf245/projects/1294
https://github.com/users/fghdfghdf245/projects/1295
https://github.com/users/fghdfghdf245/projects/1296
https://github.com/users/fghdfghdf245/projects/1297
https://github.com/users/fghdfghdf245/projects/1298
https://github.com/users/fghdfghdf245/projects/1299
https://github.com/users/fghdfghdf245/projects/1300
https://github.com/users/fghdfghdf245/projects/1301
https://github.com/users/fghdfghdf245/projects/1302
https://github.com/users/fghdfghdf245/projects/1303
https://github.com/users/fghdfghdf245/projects/1304
https://github.com/users/fghdfghdf245/projects/1305
https://github.com/users/fghdfghdf245/projects/1306
https://github.com/users/fghdfghdf245/projects/1307
https://github.com/users/fghdfghdf245/projects/1308
https://github.com/users/fghdfghdf245/projects/1309
https://github.com/users/fghdfghdf245/projects/1310
https://github.com/users/fghdfghdf245/projects/1311
https://github.com/users/fghdfghdf245/projects/1312
https://github.com/users/fghdfghdf245/projects/1313
https://github.com/users/fghdfghdf245/projects/1314
https://github.com/users/fghdfghdf245/projects/1315
https://github.com/users/fghdfghdf245/projects/1316
https://github.com/users/fghdfghdf245/projects/1317
https://github.com/users/fghdfghdf245/projects/1318
https://github.com/users/fghdfghdf245/projects/1319
https://github.com/users/fghdfghdf245/projects/1320
https://github.com/users/fghdfghdf245/projects/1321
https://github.com/users/fghdfghdf245/projects/1322
https://github.com/users/fghdfghdf245/projects/1323
https://github.com/users/fghdfghdf245/projects/1324
https://github.com/users/fghdfghdf245/projects/1325
https://github.com/users/fghdfghdf245/projects/1326
https://github.com/users/fghdfghdf245/projects/1327
https://github.com/users/fghdfghdf245/projects/1328
https://github.com/users/fghdfghdf245/projects/1329
https://github.com/users/fghdfghdf245/projects/1330
https://github.com/users/fghdfghdf245/projects/1331
https://github.com/users/fghdfghdf245/projects/1332
https://github.com/users/fghdfghdf245/projects/1333
https://github.com/users/fghdfghdf245/projects/1334
https://github.com/users/fghdfghdf245/projects/1335
https://github.com/users/fghdfghdf245/projects/1336
https://github.com/users/fghdfghdf245/projects/1337
https://github.com/users/fghdfghdf245/projects/1338
https://github.com/users/fghdfghdf245/projects/1339
https://github.com/users/fghdfghdf245/projects/1340
https://github.com/users/fghdfghdf245/projects/1341
https://github.com/users/fghdfghdf245/projects/1342
https://github.com/users/fghdfghdf245/projects/1343
https://github.com/users/fghdfghdf245/projects/1344
https://github.com/users/fghdfghdf245/projects/1345
https://github.com/users/fghdfghdf245/projects/1346
https://github.com/users/fghdfghdf245/projects/1347
https://github.com/users/fghdfghdf245/projects/1348
https://github.com/users/fghdfghdf245/projects/1349
https://github.com/users/fghdfghdf245/projects/1350
https://github.com/users/fghdfghdf245/projects/1351
https://github.com/users/fghdfghdf245/projects/1352
https://github.com/users/fghdfghdf245/projects/1353
https://github.com/users/fghdfghdf245/projects/1354
https://github.com/users/fghdfghdf245/projects/1355
https://github.com/users/fghdfghdf245/projects/1356
https://github.com/users/fghdfghdf245/projects/1357
https://github.com/users/fghdfghdf245/projects/1358
https://github.com/users/fghdfghdf245/projects/1359
https://github.com/users/fghdfghdf245/projects/1360
https://github.com/users/fghdfghdf245/projects/1361
https://github.com/users/fghdfghdf245/projects/1362
https://github.com/users/fghdfghdf245/projects/1363
https://github.com/users/fghdfghdf245/projects/1364
https://github.com/users/fghdfghdf245/projects/1365
https://github.com/users/fghdfghdf245/projects/1366
https://github.com/users/fghdfghdf245/projects/1367
https://github.com/users/fghdfghdf245/projects/1368
https://github.com/users/fghdfghdf245/projects/1369
https://github.com/users/fghdfghdf245/projects/1370
https://github.com/users/fghdfghdf245/projects/1371
https://github.com/users/fghdfghdf245/projects/1372
https://github.com/users/fghdfghdf245/projects/1373
https://github.com/users/fghdfghdf245/projects/1374
https://github.com/users/fghdfghdf245/projects/1375
https://github.com/users/fghdfghdf245/projects/1376
https://github.com/users/fghdfghdf245/projects/1377
https://github.com/users/fghdfghdf245/projects/1378
https://github.com/users/fghdfghdf245/projects/1379
https://github.com/users/fghdfghdf245/projects/1380
https://github.com/users/fghdfghdf245/projects/1381
https://github.com/users/fghdfghdf245/projects/1382
https://github.com/users/fghdfghdf245/projects/1383
https://github.com/users/fghdfghdf245/projects/1384
https://github.com/users/fghdfghdf245/projects/1385
https://github.com/users/fghdfghdf245/projects/1386
https://github.com/users/fghdfghdf245/projects/1387
https://github.com/users/fghdfghdf245/projects/1388
https://github.com/users/fghdfghdf245/projects/1389
https://github.com/users/fghdfghdf245/projects/1390
https://github.com/users/fghdfghdf245/projects/1391
https://github.com/users/fghdfghdf245/projects/1392
https://github.com/users/fghdfghdf245/projects/1393
https://github.com/users/fghdfghdf245/projects/1394
https://github.com/users/fghdfghdf245/projects/1395
https://github.com/users/fghdfghdf245/projects/1396
https://github.com/users/fghdfghdf245/projects/1397
https://github.com/users/fghdfghdf245/projects/1398
https://github.com/users/fghdfghdf245/projects/1399
https://github.com/users/fghdfghdf245/projects/1400
https://github.com/users/fghdfghdf245/projects/1401
https://github.com/users/fghdfghdf245/projects/1402
https://github.com/users/fghdfghdf245/projects/1403
https://github.com/users/fghdfghdf245/projects/1404
https://github.com/users/fghdfghdf245/projects/1405
https://github.com/users/dfghfhdfgj7/projects/1
https://github.com/users/dfghfhdfgj7/projects/2
https://github.com/users/dfghfhdfgj7/projects/3
https://github.com/users/dfghfhdfgj7/projects/4
https://github.com/users/dfghfhdfgj7/projects/5
https://github.com/users/dfghfhdfgj7/projects/6
https://github.com/users/dfghfhdfgj7/projects/7
https://github.com/users/dfghfhdfgj7/projects/8
https://github.com/users/dfghfhdfgj7/projects/9
https://github.com/users/dfghfhdfgj7/projects/10
https://github.com/users/dfghfhdfgj7/projects/11
https://github.com/users/dfghfhdfgj7/projects/12
https://github.com/users/dfghfhdfgj7/projects/13
https://github.com/users/dfghfhdfgj7/projects/14
https://github.com/users/dfghfhdfgj7/projects/15
https://github.com/users/dfghfhdfgj7/projects/16
https://github.com/users/dfghfhdfgj7/projects/17
https://github.com/users/dfghfhdfgj7/projects/18
https://github.com/users/dfghfhdfgj7/projects/19
https://github.com/users/dfghfhdfgj7/projects/20
https://github.com/users/dfghfhdfgj7/projects/21
https://github.com/users/dfghfhdfgj7/projects/22
https://github.com/users/dfghfhdfgj7/projects/23
https://github.com/users/dfghfhdfgj7/projects/24
https://github.com/users/dfghfhdfgj7/projects/25
https://github.com/users/dfghfhdfgj7/projects/26
https://github.com/users/dfghfhdfgj7/projects/27
https://github.com/users/dfghfhdfgj7/projects/28
https://github.com/users/dfghfhdfgj7/projects/29
https://github.com/users/dfghfhdfgj7/projects/30
https://github.com/users/dfghfhdfgj7/projects/31
https://github.com/users/dfghfhdfgj7/projects/32
https://github.com/users/dfghfhdfgj7/projects/33
https://github.com/users/dfghfhdfgj7/projects/34
https://github.com/users/dfghfhdfgj7/projects/35
https://github.com/users/dfghfhdfgj7/projects/36
https://github.com/users/dfghfhdfgj7/projects/37
https://github.com/users/dfghfhdfgj7/projects/38
https://github.com/users/dfghfhdfgj7/projects/39
https://github.com/users/dfghfhdfgj7/projects/40
https://github.com/users/dfghfhdfgj7/projects/41
https://github.com/users/dfghfhdfgj7/projects/42
https://github.com/users/dfghfhdfgj7/projects/43
https://github.com/users/dfghfhdfgj7/projects/44
https://github.com/users/dfghfhdfgj7/projects/45
https://github.com/users/dfghfhdfgj7/projects/46
https://github.com/users/dfghfhdfgj7/projects/47
https://github.com/users/dfghfhdfgj7/projects/48
https://github.com/users/dfghfhdfgj7/projects/49
https://github.com/users/dfghfhdfgj7/projects/50
https://github.com/users/dfghfhdfgj7/projects/51
https://github.com/users/dfghfhdfgj7/projects/52
https://github.com/users/dfghfhdfgj7/projects/53
https://github.com/users/dfghfhdfgj7/projects/54
https://github.com/users/dfghfhdfgj7/projects/55
https://github.com/users/dfghfhdfgj7/projects/56
https://github.com/users/dfghfhdfgj7/projects/57
https://github.com/users/dfghfhdfgj7/projects/58
https://github.com/users/dfghfhdfgj7/projects/59
https://github.com/users/dfghfhdfgj7/projects/60
https://github.com/users/dfghfhdfgj7/projects/61
https://github.com/users/dfghfhdfgj7/projects/62
https://github.com/users/dfghfhdfgj7/projects/63
https://github.com/users/dfghfhdfgj7/projects/64
https://github.com/users/dfghfhdfgj7/projects/65
https://github.com/users/dfghfhdfgj7/projects/66
https://github.com/users/dfghfhdfgj7/projects/67
https://github.com/users/dfghfhdfgj7/projects/68
https://github.com/users/dfghfhdfgj7/projects/69
https://github.com/users/dfghfhdfgj7/projects/70
https://github.com/users/dfghfhdfgj7/projects/71
https://github.com/users/dfghfhdfgj7/projects/72
https://github.com/users/dfghfhdfgj7/projects/73
https://github.com/users/dfghfhdfgj7/projects/74
https://github.com/users/dfghfhdfgj7/projects/75
https://github.com/users/dfghfhdfgj7/projects/76
https://github.com/users/dfghfhdfgj7/projects/77
https://github.com/users/dfghfhdfgj7/projects/78
https://github.com/users/dfghfhdfgj7/projects/79
https://github.com/users/dfghfhdfgj7/projects/80
https://github.com/users/dfghfhdfgj7/projects/81
https://github.com/users/dfghfhdfgj7/projects/82
https://github.com/users/dfghfhdfgj7/projects/83
https://github.com/users/dfghfhdfgj7/projects/84
https://github.com/users/dfghfhdfgj7/projects/85
https://github.com/users/dfghfhdfgj7/projects/86
https://github.com/users/dfghfhdfgj7/projects/87
https://github.com/users/dfghfhdfgj7/projects/88
https://github.com/users/dfghfhdfgj7/projects/89
https://github.com/users/dfghfhdfgj7/projects/90
https://github.com/users/dfghfhdfgj7/projects/91
https://github.com/users/dfghfhdfgj7/projects/92
https://github.com/users/dfghfhdfgj7/projects/93
https://github.com/users/dfghfhdfgj7/projects/94
https://github.com/users/dfghfhdfgj7/projects/95
https://github.com/users/dfghfhdfgj7/projects/96
https://github.com/users/dfghfhdfgj7/projects/97
https://github.com/users/dfghfhdfgj7/projects/98
https://github.com/users/dfghfhdfgj7/projects/99
https://github.com/users/dfghfhdfgj7/projects/100
https://github.com/users/dfghfhdfgj7/projects/101
https://github.com/users/dfghfhdfgj7/projects/102
https://github.com/users/dfghfhdfgj7/projects/103
https://github.com/users/dfghfhdfgj7/projects/104
https://github.com/users/dfghfhdfgj7/projects/105
https://github.com/users/dfghfhdfgj7/projects/106
https://github.com/users/dfghfhdfgj7/projects/107
https://github.com/users/dfghfhdfgj7/projects/108
https://github.com/users/dfghfhdfgj7/projects/109
https://github.com/users/dfghfhdfgj7/projects/110
https://github.com/users/dfghfhdfgj7/projects/111
https://github.com/users/dfghfhdfgj7/projects/112
https://github.com/users/dfghfhdfgj7/projects/113
https://github.com/users/dfghfhdfgj7/projects/114
https://github.com/users/dfghfhdfgj7/projects/115
https://github.com/users/dfghfhdfgj7/projects/116
https://github.com/users/dfghfhdfgj7/projects/117
https://github.com/users/dfghfhdfgj7/projects/118
https://github.com/users/dfghfhdfgj7/projects/119
https://github.com/users/dfghfhdfgj7/projects/120
https://github.com/users/dfghfhdfgj7/projects/121
https://github.com/users/dfghfhdfgj7/projects/122
https://github.com/users/dfghfhdfgj7/projects/123
https://github.com/users/dfghfhdfgj7/projects/124
https://github.com/users/dfghfhdfgj7/projects/125
https://github.com/users/dfghfhdfgj7/projects/126
https://github.com/users/dfghfhdfgj7/projects/127
https://github.com/users/dfghfhdfgj7/projects/128
https://github.com/users/dfghfhdfgj7/projects/129
https://github.com/users/dfghfhdfgj7/projects/130
https://github.com/users/dfghfhdfgj7/projects/131
https://github.com/users/dfghfhdfgj7/projects/132
https://github.com/users/dfghfhdfgj7/projects/133
https://github.com/users/dfghfhdfgj7/projects/134
https://github.com/users/dfghfhdfgj7/projects/135
https://github.com/users/dfghfhdfgj7/projects/136
https://github.com/users/dfghfhdfgj7/projects/137
https://github.com/users/dfghfhdfgj7/projects/138
https://github.com/users/dfghfhdfgj7/projects/139
https://github.com/users/dfghfhdfgj7/projects/140
https://github.com/users/dfghfhdfgj7/projects/141
https://github.com/users/dfghfhdfgj7/projects/142
https://github.com/users/dfghfhdfgj7/projects/143
https://github.com/users/dfghfhdfgj7/projects/144
https://github.com/users/dfghfhdfgj7/projects/145
https://github.com/users/dfghfhdfgj7/projects/146
https://github.com/users/dfghfhdfgj7/projects/147
https://github.com/users/dfghfhdfgj7/projects/148
https://github.com/users/dfghfhdfgj7/projects/149
https://github.com/users/dfghfhdfgj7/projects/150
https://github.com/users/dfghfhdfgj7/projects/151
https://github.com/users/dfghfhdfgj7/projects/152
https://github.com/users/dfghfhdfgj7/projects/153
https://github.com/users/dfghfhdfgj7/projects/154
https://github.com/users/dfghfhdfgj7/projects/155
https://github.com/users/dfghfhdfgj7/projects/156
https://github.com/users/dfghfhdfgj7/projects/157
https://github.com/users/dfghfhdfgj7/projects/158
https://github.com/users/dfghfhdfgj7/projects/159
https://github.com/users/dfghfhdfgj7/projects/160
https://github.com/users/dfghfhdfgj7/projects/161
https://github.com/users/dfghfhdfgj7/projects/162
https://github.com/users/dfghfhdfgj7/projects/163
https://github.com/users/dfghfhdfgj7/projects/164
https://github.com/users/dfghfhdfgj7/projects/165
https://github.com/users/dfghfhdfgj7/projects/166
https://github.com/users/dfghfhdfgj7/projects/167
https://github.com/users/dfghfhdfgj7/projects/168
https://github.com/users/dfghfhdfgj7/projects/169
https://github.com/users/dfghfhdfgj7/projects/170
https://github.com/users/dfghfhdfgj7/projects/171
https://github.com/users/dfghfhdfgj7/projects/172
https://github.com/users/dfghfhdfgj7/projects/173
https://github.com/users/dfghfhdfgj7/projects/174
https://github.com/users/dfghfhdfgj7/projects/175
https://github.com/users/dfghfhdfgj7/projects/176
https://github.com/users/dfghfhdfgj7/projects/177
https://github.com/users/dfghfhdfgj7/projects/178
https://github.com/users/dfghfhdfgj7/projects/179
https://github.com/users/dfghfhdfgj7/projects/180
https://github.com/users/dfghfhdfgj7/projects/181
https://github.com/users/dfghfhdfgj7/projects/182
https://github.com/users/dfghfhdfgj7/projects/183
https://github.com/users/dfghfhdfgj7/projects/184
https://github.com/users/dfghfhdfgj7/projects/185
https://github.com/users/dfghfhdfgj7/projects/186
https://github.com/users/dfghfhdfgj7/projects/187
https://github.com/users/dfghfhdfgj7/projects/188
https://github.com/users/dfghfhdfgj7/projects/189
https://github.com/users/dfghfhdfgj7/projects/190
https://github.com/users/dfghfhdfgj7/projects/191
https://github.com/users/dfghfhdfgj7/projects/192
https://github.com/users/dfghfhdfgj7/projects/193
https://github.com/users/dfghfhdfgj7/projects/194
https://github.com/users/dfghfhdfgj7/projects/195
https://github.com/users/dfghfhdfgj7/projects/196
https://github.com/users/dfghfhdfgj7/projects/197
https://github.com/users/dfghfhdfgj7/projects/198
https://github.com/users/dfghfhdfgj7/projects/199
https://github.com/users/dfghfhdfgj7/projects/200
https://github.com/users/dfghfhdfgj7/projects/201
https://github.com/users/dfghfhdfgj7/projects/202
https://github.com/users/dfghfhdfgj7/projects/203
https://github.com/users/dfghfhdfgj7/projects/204
https://github.com/users/dfghfhdfgj7/projects/205
https://github.com/users/dfghfhdfgj7/projects/206
https://github.com/users/dfghfhdfgj7/projects/207
https://github.com/users/dfghfhdfgj7/projects/208
https://github.com/users/dfghfhdfgj7/projects/209
https://github.com/users/dfghfhdfgj7/projects/210
https://github.com/users/dfghfhdfgj7/projects/211
https://github.com/users/dfghfhdfgj7/projects/212
https://github.com/users/dfghfhdfgj7/projects/213
https://github.com/users/dfghfhdfgj7/projects/214
https://github.com/users/dfghfhdfgj7/projects/215
https://github.com/users/dfghfhdfgj7/projects/216
https://github.com/users/dfghfhdfgj7/projects/217
https://github.com/users/dfghfhdfgj7/projects/218
https://github.com/users/dfghfhdfgj7/projects/219
https://github.com/users/dfghfhdfgj7/projects/220
https://github.com/users/dfghfhdfgj7/projects/221
https://github.com/users/dfghfhdfgj7/projects/222
https://github.com/users/dfghfhdfgj7/projects/223
https://github.com/users/dfghfhdfgj7/projects/224
https://github.com/users/dfghfhdfgj7/projects/225
https://github.com/users/dfghfhdfgj7/projects/226
https://github.com/users/dfghfhdfgj7/projects/227
https://github.com/users/dfghfhdfgj7/projects/228
https://github.com/users/dfghfhdfgj7/projects/229
https://github.com/users/dfghfhdfgj7/projects/230
https://github.com/users/dfghfhdfgj7/projects/231
https://github.com/users/dfghfhdfgj7/projects/232
https://github.com/users/dfghfhdfgj7/projects/233
https://github.com/users/dfghfhdfgj7/projects/234
https://github.com/users/dfghfhdfgj7/projects/235
https://github.com/users/dfghfhdfgj7/projects/236
https://github.com/users/dfghfhdfgj7/projects/237
https://github.com/users/dfghfhdfgj7/projects/238
https://github.com/users/dfghfhdfgj7/projects/239
https://github.com/users/dfghfhdfgj7/projects/240
https://github.com/users/dfghfhdfgj7/projects/241
https://github.com/users/dfghfhdfgj7/projects/242
https://github.com/users/dfghfhdfgj7/projects/243
https://github.com/users/dfghfhdfgj7/projects/244
https://github.com/users/dfghfhdfgj7/projects/245
https://github.com/users/dfghfhdfgj7/projects/246
https://github.com/users/dfghfhdfgj7/projects/247
https://github.com/users/dfghfhdfgj7/projects/248
https://github.com/users/dfghfhdfgj7/projects/249

相關文章