Base64加密原理(转)

Base64是一种加料置位加密法,那为什么叫base64呢?因为无论明文是什么(比如汉字,特殊符号等),加密后的密文都只会变成字母A-Z、a-z和0-9 和+和/这64个字符,被他加密体后积一般会变成原来的4/3。

Base64的标准在RFC2045里的24页可以看到。

http://wenku.baidu.com/view/bd567523aaea998fcc220e8e.html

下面我就来加密一个astralidea的简写AST来说明他的加密原理。


图1


为了说明方便,我们用人的思考方式,而不是计算机的方式,下面是图1的说明。

1.假设有3个字符,首先先将他换成10进制ASCII码,然后转成2进制,少位用0补齐,保证8位。

2.因为ASCII码大小是一字节也就是8位,3个8位。又因为3*8=4*6,我们给他分成4分,每份6位。如果少位都用0补齐。

3.把6位码前2位加两个0,比如010000转完后就是00010000,这对计算机来说比较重要,变成了8位码。

4.将4个8位(也就是一字节)码按照RFC里的BASE64标准换算,下面也提供了标准表。

这样我们就得到了QVNU,也就是AST加密的结果。

下面是标准的BASE64编码表。


图2

那么有3N个字符就是分别把3个转成4个了,那假如有3N+1个字符怎么办呢?

BASE64是这样规定的,剩下的用“=”补齐。

比如A这个字符转后为01000001末尾加4个0变为010000|010000查表得QQ差2个用=补齐。

因此A加密后是QQ==,对于3N+2情况

同理AS加密后为QVM=

这样就有了所有情况了。

说了这么多,我们给出实现加密的代码,从这里更可以看出加密过程简洁的表达:


图3

当然如果你用.net库你可以直接调用

byte[] bytes=Encoding.Default.GetBytes("ConvertString");

Convert.ToBase64String(bytes);

即可。

应用:

1.由于BASE64可以加密任何的字符,那么我们可以把一个小程序比如几K的EXE文件加密,然后就可以发到网页上,因为BASE64标准没有非法字符,放到任何空间都应该不会有问题。然后另一边复制下来解密就OK了,这样可以省得传到网络硬盘各种原因(比如病毒上传失败)之类的问题。

2.BASE64最初是考虑加密后让你不能一眼看出明文是什么而出现的,其最主要的应用当然是加密了,比如迅雷就是通过BASE64加料后加密而实现的。

比如我虚拟一个地址http://www.astralidea.com/down.exe

我们知道这个地址根本不存在,假设我们会了BASE64怎么模拟迅雷的地址呢?

1.迅雷把上面地址加上料AA和ZZ变成:AAhttp://www.astralidea.com/down.exeZZ

2.把上面的字符加密得:QUFodHRwOi8vd3d3LmFzdHJhbGlkZWEuY29tL2Rvd24uZXhlWlo=

3.再前面加上thunder://得:thunder://QUFodHRwOi8vd3d3LmFzdHJhbGlkZWEuY29tL2Rvd24uZXhlWlo=

你会发现加密后的和我虚拟的是一样的。

FLASHGET原理也是一样,只不过加的料为[FLASHGET]。

而QQ旋风干脆不加料,直接就对地址进行BASE64编码了。

3.Asp.Net里的viewstate就是用BASE64加密所得的,如果了解了这个可以把他解密就能得到一个XML文件,找到key-value pairs

4.BASE64变体,上面所说的都是标准的BASE64,如果我们把加密表里的内容替换或打乱顺序就成了变异的BASE64,如Uuencode加密方法原理一样,但是加密表不一样。

。。。。。

那么BASE64是怎么解密的呢?只要你动动脑筋自己也写一写,一定能写出来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • MD5加密 MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。 MD5...
    ethan_cun阅读 3,073评论 0 2
  • 0x01 目录 常见编码: ASCII编码 Base64/32/16编码 shellcode编码 Quoted-p...
    H0f_9阅读 14,543评论 2 17
  • 关于网络安全的数据加密部分,本来打算总结一篇博客搞定,没想到东西太多,这已是第三篇了,而且这篇写了多次,熬了多次夜...
    时间已静止阅读 10,541评论 12 95
  • CTF中那些脑洞大开的编码和加密 0x00 前言 正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问...
    查无此人asdasd阅读 11,384评论 0 19
  • 概述 之前一直对加密相关的算法知之甚少,只知道类似DES、RSA等加密算法能对数据传输进行加密,且各种加密算法各有...
    Henryzhu阅读 8,291评论 0 14

友情链接更多精彩内容