#include "stdio.h"
#include "string.h"
#include "stdlib.h"
char* base64_decode(const char* str) {
unsigned char imap[79] = { 62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,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,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 };
int rest_count = 0;
int buf_idx = 0;
int len = strlen(str);
int flen = len;
while (str[flen - 1] == '=')
flen--;
int buflen = flen * 6 / 8 + 1;
char* buf = (char*)malloc(buflen);
memset(buf, '\0', buflen);
for (int i = 0; i<flen; i++) {
unsigned char c = imap[str[i] - 43];
int mcount = rest_count == 0 ? -2 : 6 - rest_count;
unsigned char c0 = (mcount>0 ? c >> mcount : c << -mcount);
buf[buf_idx] = buf[buf_idx] | c0;
rest_count = mcount <0 ? -mcount : 8 - m
从Sec-WebSocket-Key生成Sec-WebSocket-Accept 回顾 对hex数据进行base64计算
于 2023-05-16 14:43:59 首次发布