base64加密原理
今天面试被问到以前的项目有没有用到网络传输加密,当时脑袋抽风没想起来直接说了没有。回来后看书看到了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加密原理相关推荐
- base64加密原理及python、C语言代码实现
base64算法 base64加密原理 关于base64,百度百科给出的解释是: Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制 ...
- base64加密原理详解
base64加密原理详解 声明:本文是在看了他人总结,并摘抄大部分图文,和少量自己的总结写成 原作者地址链接:Base64算法原理 Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于 ...
- base64加密原理详解及C语言源码
base64加密原理详解 Base64从本质来说,其实并不是加密算法,只是一种编码方式而已,Base64的"加解密"也不叫加密解密,而是编码解码,但是现在一般都把它归为加密算法. ...
- base64加密原理解析
开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时间 ...
- Base64 加密算法原理
Base64 加密算法原理 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 因为在内存中每个字节占8位,即 1 by ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结
(1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...
- RSA 非对称加密原理
RSA 加密原理 步骤 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) = (P-1)(Q-1) - 4 计算公钥E 1 < E ...
- java 和 Android Base64加密,java开发面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- linux脚本base64加密当时,【加密算法】Base64
一.简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规 ...
- 深入理解 Base64 底层原理
Base64 是一种常见数据编码方式,常用于数据传输.对于移动开发者来讲,网络请求中会经常使用到.对 JSON 熟悉的同学都知道,JSON 的序列化工具都不支持将 byte 数组直接放入 JSON 数 ...
最新文章
- div内实现文字左右循环滚动
- 首次证明:牵手就能同步脑电波,还能缓解疼痛
- Codeforces Round #395 (Div. 2)(未完)
- boost::function模块实现contains的测试程序
- D盘提示RAW文件如何找回
- 95-00-030-环境-IDEA构建源码阅读环境
- Mac安装Homebrew教程
- PHP htmlspecialchars() 函数
- 基于主键索引和普通索引的查询区别
- 双线性的定义以及他的性质
- 打印服务器 支持 佳能 2900+打印机,佳能LBP2900,夏普等特殊打印机如何实现打印?(虚拟USB软件用途之二)...
- [LOJ2339][虚树][边分治][树形DP]WC2018:通道
- AI语音红外遥控配网教程
- 相差天数时分秒_PHP 小方法之 计算两个时间戳之间相差的日时分秒
- Busiest Computing Nodes (线段树维护区间最小值)
- 用正则表达式提取歌词LRC中的歌词
- Linux Deploy在安卓手机安装LINUX系统
- 2022AI决策智能实践:美宜佳
- 引导区坏 计算机无法启动,windows7旗舰版系统下注册表损坏导致无法引导启动怎么解决...
- o365不能登录的问题