base64逆向加密分析

简介

base64编码根据编码表将一段二进制数据映射成64个可显示字母和数字组成的字符集合,主要用于传送图形、声音等非文本数据。

标准 base64 编码表

编码原理

原理

下面我们通过将明文 “abc” 进行 base64 编码来讲解 base64 编码原理。

1.首先将明文每三个字节分为一组,每个字节8bit,共24bit。

在这里插入图片描述

2.将24bit划分为四组,每组6bit,4组共24bit

在这里插入图片描述

3.将每组用0补齐为8bit,4组共32bit。

黄色部分就是补齐的0。

将补齐后的二进制数的十进制值作为编码表的下标获取编码表中的对应值。

在这里插入图片描述

编码结果就是 “YWJj”

如果编码后的字符不是4的倍数,后面用 “=” 填充补齐。

代码实现

//定义一个常量指针指向一个常量字符串
const char * const table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

//data是用于指向需要编码的常量数据的指针
//base64指针指向一块内存用于存储编码后的basse64字符串
//length是输入数据的长度
char * encode( const unsigned char * data, char * base64, int length )
{
      
    //用于遍历输入数据和base64字符
    int i, j;
    
    //用于存储当前处理的字符
    unsigned char current;
    
    //循环遍历输入数据,每次处理3个字节
    for ( i = 0, j = 0 ; i < length ; i += 3 ){
      
       
       //获取第一个字节的前六位
        current = (data[i] >> 2) ;
        
        //与0x3f进行按位与操作,取字节前6位
		//0x3f=00111111
        current &= (unsigned char)0x3F;
        
        //使用编码表数组将结果映射为base64字符,并将结果存储在输出指针中
        base64[j++] = table[(int)current];
        
        //将第一个字节左移4位,与0x30按位与,取其后2位
	    //0x30=00110000
        current = ( (unsigned char)(data[i] << 4 ) ) & ( (unsigned char)0x30 ) ;


        //如果没有第二个(即输入长度不足2个字节),则直接填充“=”字母并返回
        if ( i + 1 >= length )
        {
   
            base64[j++] = table[(int)current];
            base64[j++] = '=';
            base64[j++] = '=';
            break;
        }
        
        //第二个字节右移4位,取其前4位,与之前第一个字节后两位合并
        //00110000
        //或
        //00001111
        current |= (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值