今天面试被问到以前的项目有没有用到网络传输加密,当时脑袋抽风没想起来直接说了没有。回来后看书看到了base64几个字,顿时醒悟了过来。

Shit!明明最近的项目就用到了base64方法加密的,只是做的比较久远了,后面又没怎么改动过,就把它忽略了。既然这样,那就白纸黑字记下来吧,以免下次脑袋抽风。

首先,base64编码的原理是先将源文件以标准字节(byte)为单位转化成二进制,一个字节占8个位(bit),如“ABC”的二进制是01000001、01000010、01000011,这样源文件就形成了每8个bit一组的一串二进制,然后将这些二进制串以base64特有的规则(每个字节占6个位)再转化成base64格式的字符(如下图),编码完成。解码就是这个过程反过来。

Base64 编码表
Value Char   Value Char   Value Char   Value Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

"ABC"的转化为base64字符的逻辑如下:

A                      B                 C

ASCII十进制                          65                      66                67

8bit/byte                           01000001       01000010     01000011

6bit/byte                           010000    010100    001001    000011

base64十进制                       16            20           9              3

base64字符                            Q             U            J              D

这样,"ABC"三个标准字符就转化成了"QUJD"四个base64字符。

明眼人就会发现,base64编码以后字节数会增加,事实上也确实如此,因为原先8个占位的字节转化成了6个占位的字节,每3个原先的字节就转化成了4个base64字节。这算是base64编码的一个副作用吧。先忽略这个,讲重点。

现在问题来了,既然编码和解码的规律是固定的大家都知道,那还怎么起到加密的作用呢?

这种编码的方式有个特点,就是解码的时候要么从最前面的字节往后推,要么从最后的字节往前推,最前面和最后面的字节可以直接影响到全部的解码结果。跟多米诺骨牌一样,一个错误,后面都会跟着错误。

既然这样,我们在源文件的最前面和最后面分别加上一个简单的字符,那解码出来的文件内容就跟源文件相差了十万八千里,因为第一个不对,那以此类推,后面的解码都会错误。

基于这种原理,我们采取的方法就是编码前,在源文件的前后分别加上干扰字符,为了增加破译的难度,这些字符可以稍微复杂点,但是要提前告知服务端的同学这种加密的格式,这样服务端才能在解码时排除干扰字符得到正确的内容。

好了,原理就是这些了。其他的加密方法还有待进一步研究,到时候再做个对比。

base64加密原理相关推荐

  1. base64加密原理及python、C语言代码实现

    base64算法 base64加密原理 关于base64,百度百科给出的解释是: Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制 ...

  2. base64加密原理详解

    base64加密原理详解 声明:本文是在看了他人总结,并摘抄大部分图文,和少量自己的总结写成 原作者地址链接:Base64算法原理 Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于 ...

  3. base64加密原理详解及C语言源码

    base64加密原理详解 Base64从本质来说,其实并不是加密算法,只是一种编码方式而已,Base64的"加解密"也不叫加密解密,而是编码解码,但是现在一般都把它归为加密算法. ...

  4. base64加密原理解析

    开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时间 ...

  5. Base64 加密算法原理

    Base64 加密算法原理 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 因为在内存中每个字节占8位,即 1 by ...

  6. Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结

    (1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...

  7. RSA 非对称加密原理

    RSA 加密原理 步骤 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) = (P-1)(Q-1) - 4 计算公钥E 1 < E ...

  8. java 和 Android Base64加密,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  9. linux脚本base64加密当时,【加密算法】Base64

    一.简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规 ...

  10. 深入理解 Base64 底层原理

    Base64 是一种常见数据编码方式,常用于数据传输.对于移动开发者来讲,网络请求中会经常使用到.对 JSON 熟悉的同学都知道,JSON 的序列化工具都不支持将 byte 数组直接放入 JSON 数 ...

最新文章

  1. div内实现文字左右循环滚动
  2. 首次证明:牵手就能同步脑电波,还能缓解疼痛
  3. Codeforces Round #395 (Div. 2)(未完)
  4. boost::function模块实现contains的测试程序
  5. D盘提示RAW文件如何找回
  6. 95-00-030-环境-IDEA构建源码阅读环境
  7. Mac安装Homebrew教程
  8. PHP htmlspecialchars() 函数
  9. 基于主键索引和普通索引的查询区别
  10. 双线性的定义以及他的性质
  11. 打印服务器 支持 佳能 2900+打印机,佳能LBP2900,夏普等特殊打印机如何实现打印?(虚拟USB软件用途之二)...
  12. [LOJ2339][虚树][边分治][树形DP]WC2018:通道
  13. AI语音红外遥控配网教程
  14. 相差天数时分秒_PHP 小方法之 计算两个时间戳之间相差的日时分秒
  15. Busiest Computing Nodes (线段树维护区间最小值)
  16. 用正则表达式提取歌词LRC中的歌词
  17. Linux Deploy在安卓手机安装LINUX系统
  18. 2022AI决策智能实践:美宜佳
  19. 引导区坏 计算机无法启动,windows7旗舰版系统下注册表损坏导致无法引导启动怎么解决...
  20. o365不能登录的问题

热门文章

  1. Json数组转Map
  2. Python 爬虫逆向破解案例实战 (二):STEAM密码加密 (RSA) 逆向
  3. [OT]ubuntu下安装HP-P1108打印机驱动
  4. aws篇12 搭建一个推流、读流、RTSP服务器
  5. Python 蓝牙通信模块pybluez Win7
  6. 在linux下使用IDE运行C语言
  7. Linux网络基础知识
  8. 正好股票开户指数大跌分解比较严重
  9. 相机的成像原理: 针孔相机, 胶卷相机 和 数码相机
  10. 无头浏览器 html5定位,PhantomJS-无头浏览器的妙用