⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base64.cpp

📁 用于网络抓包的源码实现,可以查看特定端口和Ip的数据包
💻 CPP
字号:
#include <windows.h>
#include "Base64.h"

CBase64::CBase64()
{

}

CBase64::~CBase64()
{

}

int CBase64::POS(char c)
{
  if(c == '=') return 64;
  if(isupper(c))
    return c - 'A';
  if(islower(c))
    return c - 'a' + 26;
  if(isdigit(c))
    return c - '0' + 52;
  if(c == '+')
    return 62;
  if(c == '/')
    return 63;
  return -1;
}

char * CBase64::base64encode(const void *buf, int size)
{
  char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  char *str = (char*)malloc((size+3)*4/3+1);
  char *p=str;
  unsigned char *q = (unsigned char*)buf;
  int i;
  int c;
  i=0;
  while(i<size){
    c=q[i++];
    c*=256;
    if(i<size)
      c+=q[i];
    i++;
    c*=256;
    if(i<size)
      c+=q[i];
    i++;
    p[0]=base64[(c&0x00fc0000) >> 18];
    p[1]=base64[(c&0x0003f000) >> 12];
    p[2]=base64[(c&0x00000fc0) >> 6];
    p[3]=base64[(c&0x0000003f) >> 0];
    if(i>size)
      p[3]='=';
    if(i>size+1)
      p[2]='=';
    p+=4;
  }
  *p=0;
  return str;
}

int CBase64::base64decode(char *s, void *data)
{
  char *p;
  unsigned char *q;
  int n[4];

  if(strlen(s) % 4)
    return -1;
  q=(unsigned char*)data;
  for(p=s; *p; p+=4){
    n[0] = POS(p[0]);
    n[1] = POS(p[1]);
    n[2] = POS(p[2]);
    n[3] = POS(p[3]);
    if((n[0] | n[1] | n[2] | n[3]) < 0)
      return -1;

    if(n[0] == 64 || n[1] == 64)
      return -1;
    if(n[2] == 64 && n[3] < 64)
      return -1;
    q[0] = (n[0] << 2) + (n[1] >> 4);
    if(n[2] < 64){
      q[1] = ((n[1] & 15) << 4) + (n[2] >> 2);
    }
    if(n[3] < 64){
      q[2] = ((n[2] & 3) << 6) + n[3];
    }
    q+=3;
  }
  q -= (n[2] == 64) + (n[3] == 64);
  return q - (unsigned char*)data;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -