zoukankan      html  css  js  c++  java
  • 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.假设有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编码表。

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

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

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

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

    同理AS加密后为QVM=
    这样就有了所有情况了。

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

    当然如果你用.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是怎么解密的呢?只要你动动脑筋自己也写一写,一定能写出来。

  • 相关阅读:
    算法----(1)冒泡排序
    淘宝爬虫
    爬虫_豆瓣电影top250 (正则表达式)
    爬虫_猫眼电影top100(正则表达式)
    Android 简单调用摄像头
    Android 简单天气预报
    思维模型
    This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you
    Android studio preview界面无法预览,报错render problem
    Android studio 3.1.2报错,no target device found
  • 原文地址:https://www.cnblogs.com/qq78292959/p/3077837.html
Copyright © 2011-2022 走看看