Base64编码的前世今生

93 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

base编码是一种常见的编码方式,常见的有base64、base32、base16等等,下面简单介绍一下常见base64编码

​ Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,base64就是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应4个base64单元,即3个字节可表示4个可打印字符。可用来作为电子邮件的传输编码。

ac4bd11373f08202d5499e3be10b87e7a9641bd1.png

通过代码看一下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//头文件

int main(int argc, char *argv[]) {
    char str1[200] = {0};
	gets(str1);
    unsigned char *str2;
    int len1;
    int len2;
    int i,j;
    unsigned char *table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwzyz0123456789+/";

    len1=strlen(str1);
//加密后的字符个数
    if(len1%3!=0)
    {
        len2=(len1/3+1)*4;
    }
    else
    {
        len2=(len1/3)*4;
    }

    str2=malloc(sizeof(unsigned char)*len2+1); 
    str2[len2]='\0';
//循环加密
    for(i=0,j=0;i<len1;i+=3,j+=4)
    {
        str2[j]=table[str1[i]>>2];  
  //第一个字符右移2位  
        str2[j+1]=table[(((str1[i]&3)<<4)|(str1[i+1]>>4))];
  //第二个字符保留其二进制的后两位,再左移4位
        str2[j+2]=table[((str1[i+1]&15)<<2)|(str1[i+2]>>6)];
  //&15保留第二个待加密字符的后4位,再左移两位使其变成六位中的高四位,再和第三个待加密字符右移六位后剩下的前两位合并,对应一个base64编码字符
        str2[j+3]=table[str1[i+2]&63];
        //保留最后一个待加密字符的后6位对应一个base64编码字符
     } 

    printf("length:%d\n",len2); //加密之后的长度

    switch(len1%3)
    {
        case 1:
            str2[len2-2]='=';
            str2[len2-1]='=';
            break;
        case 2:
            str2[len2-1]='=';
            break;
    }

    for(i=0;i<len2;i++)
    {
          printf("%c",str2[i]);
       }
    return 0;
}


同时给出解密脚本

import base64
data0= 'SGVsbG8lMjB3b3JsZCV1RkYwMQ=='
print(base64.b64decode(data0))

data0内存放加密后的字符串

以上即为base64编码相关的知识