c语言RC4加密返回base64编码,base64加密原理以及C语言实现 | 赤道企鹅的博客

按照二进制学习的路线,了解二进制程序常用的加密方式以及对应的汇编、伪代码特征是很必要的。我在CSDN上看了很多篇方法都不一样,而且很冗长,于是打算自己用C实现一下。

0x00 base64的原理

编码方式

计算机储存数据以字节为单位,一个位有八个字节,比如“abc”字符串,这是底层的数据结构

a b c

01100001 01100010 01100011

三个字符对应3×8=24个位,同时24可以看成6×4的积,故把三个字节组合后,以六个字节为一组分割可以分割出4组,但是为了符合计算机的储存结构,每组空出来的两个高位要补上0。

00011000 00010110 00001001 00100011

同时,新的四个字节每个可以表示一个整数,如果将这些整数映射到一张特定的码表上,便会得到一个新的字符串。例如这是标准base64的码表:

3e5dff146cdd84f68fea7fed6133c4d0.png由于base64有效位只有6位,意味着最大可以表示64个元素,故码表为0至63

那么刚刚新的四个字节就被表示成了:

Y(24) W(22) J(9) Z(25)

于是一串base64码就出来了:abc->YWJj

假如加密内容长度不是3的倍数怎么办?

我们可以通过补全字节的方法用0补全字节数到3的倍数,然后在base64码后用‘=’表明补全字节的数量。例如“abcd”字符串:

a b c d

01100001 01100010 01100011 01100100

00011000(Y) 00010110(W) 00001001(J) 00100011(j) 00011001(Z) 00000000(A) 00000000(A) 00000000(A)

//最后两个A要替换为=,因为转换后具有有效信息的只是前6个字节

得到base64码YWJjZA==

代码实现

利用3变4,不够3补为3的逻辑,我们可以利用C语言以三个字节为一组利用位运算符进行base64转换(个人认为三个字节一组循环处理是最高效的)

这是编码部分的C程序,标明了一些细节:

void base64_encode(char *src,char *result){

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值