持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
base编码是一种常见的编码方式,常见的有base64、base32、base16等等,下面简单介绍一下常见base64编码
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,base64就是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应4个base64单元,即3个字节可表示4个可打印字符。可用来作为电子邮件的传输编码。
通过代码看一下
#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编码相关的知识