【常见加密方法】Base64编码Tea算法简介
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【常见加密⽅法】Base64编码Tea算法简介
Base64编码
【Base64编码是什么】
Base64是⼀种基于64个可打印字符来表⽰的表⽰⽅法。
——维基百科
Base64,顾名思义,是基于64种可视字符的编码⽅式。
这64种符号由A-Z,a-z,0-9以及另外两个视不同系统⽽定的可视⾃符(⼀般为+和/)组成。
因为六位⼆进制数可以表⽰所有1-26以内的整数,所以在编码过程中取每六位⼆进制数依照顺序对应相应可视字符。
Base64将3字节的⼆进制数据,以先来的字节占据⾼位,不⾜三字节则在数据尾部⽤0补⾜的规则放⼊24位缓存器中;在计算时,依次取出6bits进⾏相应对照编码。
⽽当不⾜三字节进⾏补0时,编码结束后要在尾部加上相应补充字节数数量的“=”。
【Base64编码图解】
这⾥拿RED举个例⼦:
由图中⼀层层推到⽽出RED的Base64编码为UkVE
我们再看看维基百科上缺字节进⾏补0的例⼦:
等号数量等于补充的字节数
Tea 算法
【Tea算法是什么】
在中,微型加密算法(Tiny Encryption Algorithm,TEA)是⼀种易于描述和的,通常只需要很少的代码就
可实现。
——维基百科
Tea算法能够利⽤4个32位密钥对2个32位明⽂数据进⾏多轮加密,利⽤不断增加的Delta值和两个32位数据相互加密来保持每⼀轮加密的和其他任何⼀轮加密不同。
在知道4个32位密钥的情况下,利⽤可逆的加减操作进⾏数据的加密与解密。
【Tea算法模版与浅析】
这⾥我⽤{1234,4321}作为待加密的两个32位明⽂数据,⽤{2147483647,2147483646,2147483645,2147483644}作为四个32位密钥举例。
1 #include <cstdio>
2
3const int delta = 0x9e3779b9;//Tea算法作者的建议值
4int scr[2],key[4];
5
6void _pre(){
7 scr[0] = 1234;
8 scr[1] = 4321;
9 key[0] = 2147483647;
10 key[1] = 2147483646;
11 key[2] = 2147483645;
12 key[3] = 2147483644;
13 }
14
15void DoTea(){
16int a = scr[0],b = scr[1],sum = 0;
17for(int i=1;i<=32;++i){//进⾏32次迭代加密,Tea算法作者的建议迭代次数
18 sum += delta;//不断增加Delta的值
19 a += ((b << 4) + key[0]) ^ (b + sum) ^ ((b >> 5) + key[1]);//利⽤多次双位移和异或将明⽂与密钥扩散混乱,并将两个明⽂互相加密
20 b += ((a << 4) + key[2]) ^ (a + sum) ^ ((a >> 5) + key[3]);
21 }
22 scr[0] = a;//将原数据覆盖为密⽂
23 scr[1] = b;//将原数据覆盖为密⽂
24 printf("%d %d\n",scr[0],scr[1]);
25 }
26
27void UndoTea(){//利⽤可逆性将加密过程逆转
28int a = scr[0],b = scr[1],sum = 0xc6ef3720;//32次迭代后delta的值
29for(int i=1;i<=32;++i){
30 b -= ((a << 4) + key[2]) ^ (a + sum) ^ ((a >> 5) + key[3]);
31 a -= ((b << 4) + key[0]) ^ (b + sum) ^ ((b >> 5) + key[1]);
32 sum -= delta;
33 }
34 scr[0] = a;
35 scr[1] = b;
36 printf("%d %d\n",scr[0],scr[1]);
37 }
38
39int main(){
40 _pre();
41 DoTea();
42 UndoTea();
43return0;
44 }
Tea算法的作者建议加密迭代次数为32次*,以保证数据被充分加密;Delta的值本是可以任何数字,但作者为了避免可能的错误⽽将delta的值建议为delta = (√5 - 1) * 2147483648 ≈ 2654435769.497230296477,取整为2654435769,即0X9e3779b9。
Tea算法利⽤迭代过程中多次的位运算和异或使明⽂与密钥充分扩散混乱,并以下图⽅式进⾏两个数据间的互相加密:
*注:Tea算法作者强调迭代次数16次即可达到加密效果,但仍然建议32次迭代保证加密牢靠。