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位密钥举例。

 #include <cstdio>

 const int delta = 0x9e3779b9;//Tea算法作者的建议值
int scr[],key[]; void _pre(){
scr[] = ;
scr[] = ;
key[] = ;
key[] = ;
key[] = ;
key[] = ;
} void DoTea(){
int a = scr[],b = scr[],sum = ;
for(int i=;i<=;++i){//进行32次迭代加密,Tea算法作者的建议迭代次数
sum += delta;//不断增加Delta的值
a += ((b << ) + key[]) ^ (b + sum) ^ ((b >> ) + key[]);//利用多次双位移和异或将明文与密钥扩散混乱,并将两个明文互相加密
b += ((a << ) + key[]) ^ (a + sum) ^ ((a >> ) + key[]);
}
scr[] = a;//将原数据覆盖为密文
scr[] = b;//将原数据覆盖为密文
printf("%d %d\n",scr[],scr[]);
} void UndoTea(){//利用可逆性将加密过程逆转
int a = scr[],b = scr[],sum = 0xc6ef3720;//32次迭代后delta的值
for(int i=;i<=;++i){
b -= ((a << ) + key[]) ^ (a + sum) ^ ((a >> ) + key[]);
a -= ((b << ) + key[]) ^ (b + sum) ^ ((b >> ) + key[]);
sum -= delta;
}
scr[] = a;
scr[] = b;
printf("%d %d\n",scr[],scr[]);
} int main(){
_pre();
DoTea();
UndoTea();
return ;
}

  Tea算法的作者建议加密迭代次数为32次*,以保证数据被充分加密;Delta的值本是可以任何数字,但作者为了避免可能的错误而将delta的值建议为delta = (√5 - 1) * 2147483648 ≈ 2654435769.497230296477,取整为2654435769,即0X9e3779b9

  Tea算法利用迭代过程中多次的位运算和异或使明文与密钥充分扩散混乱,并以下图方式进行两个数据间的互相加密:

图源自:https://blog.csdn.net/jinzhichaoshuiping/article/details/54588003

  *注:Tea算法作者强调迭代次数16次即可达到加密效果,但仍然建议32次迭代保证加密牢靠。

【常见加密方法】Base64编码&Tea算法简介的更多相关文章

  1. qt md5加密,base64编码解码

    qt md5加密,base64编码解码 md5加密 QByteArray data = "12121221"; data += "asdfas"; QByteA ...

  2. 【Mysql sql inject】POST方法BASE64编码注入write-up

      翻到群里的小伙伴发出一道POST型SQL注入题,简单抓包判断出题目需要base64编码后才执行sql语句,为学习下SQL注入出题与闯关的思路+工作不是很忙,所以花点时间玩了一下,哈哈哈哈哈哈哈哈哈 ...

  3. MD5加密与base64编码

    转自:http://blog.csdn.net/sxzlc/article/details/74127268 import java.io.UnsupportedEncodingException; ...

  4. Base64编码和解码算法

    Base64么新鲜的算法了.只是假设你没从事过页面开发(或者说动态页面开发.尤其是邮箱服务),你都不怎么了解过,仅仅是听起来非常熟悉. 对于黑客来说,Base64与MD5算法有着相同的位置.由于电子邮 ...

  5. Base64编码 概念和用途

    Base64概念 什么是Base64? 依照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把随意序列的8位字节描写叙述为一种不易被人直接识别的形式.(The Base6 ...

  6. java编写之jpg图片与base64编码之间的转换

    /** * @author zyq * 将网络图片进行Base64位编码 * @param imgUrl * */ public static String encodeWebImageToBase6 ...

  7. Base64编码知识详解

    在我们进行前端开发时,针对项目优化,常会提到一条:针对较小图片,合理使用Base64字符串替换内嵌,可以减少页面http请求. 并且还会特别强调下,必须是小图片,大小不要超过多少KB,等等. 那么,B ...

  8. 浅谈Base64编码

    浅谈Base64编码 我打赌当你见到Base64这个词的时候你会觉得在哪里见过,因为在你能够上网看到这篇文章的时候你已经在后台使用它了.如果您对二进制数有所了解,你就可以开始读它了. 打开一封Emai ...

  9. 从原理上理解Base64编码

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

随机推荐

  1. Windows 提权对照表 精确到sp版本号

    https://www.securitysift.com/download/MS_privesc_and_exploits_table.csv

  2. Perl6 Bailador框架(4):路径匹配

    use v6; use Bailador; =begin pod /:one/:two/:....路径选择 这个路径, 用/分隔 每个/分隔一个, 如果你只设置两个(/admin/login),时, ...

  3. linux下终端游戏

    sl 一列火车 oneko 一只淘气的小猫

  4. uboot makefile构建分析

    前言 几年前分析过uboot的构建及启动过程,做了笔记,但最终没有转为文章.这次又有机会开发嵌入式产品了(之前一年多都是在搞x86 linux),看了下uboot的构建过程,觉得有必要写下整个分析过程 ...

  5. 再思linux内核在中断路径内不能睡眠/调度的原因(2010)【转】

    转自:http://blog.csdn.net/maray/article/details/5770889 Linux内核中断路径中不能睡眠,为什么? 这里就行了很深入的讨论,值得一看:http:// ...

  6. Atom:优雅迷人的编辑神器

    对于热爱markdown写作的人来说,Atom同样是一款拥有无穷魅力的写作软件.我不怕它无法满足你的需求,就怕你不给一个机会了解它,那么,这将是一场遗憾的错过. 大学的时候,坊间对那些编程高手有一个令 ...

  7. [How to]Cloudera manager 离线安装手册

    2016-01-1910:54:05  增加kafka 1.简介 本文介绍在离线环境下安装Cloudera manager和简单使用方法 2.环境 OS:CentOS 6.7 Cloudera man ...

  8. 全国省市区数据SQL - 省市区

    转载:https://www.cnblogs.com/flywind/p/6036801.html

  9. [ python ] 类的组合

    首先,使用面向对象是一个人狗大战的实例: class Person: def __init__(self, name, hp, aggr, sex): self.name = name self.hp ...

  10. 几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、HTTPS加密方式

    # 原创,转载请留言联系 为什么会出现这么多加密啊,公钥私钥啊,签名啊这些东西呢?说到底还是保证双方通信的安全性与完整性.例如小明发一封表白邮件给小红,他总不希望给别人看见吧.而各种各样的技术就是为了 ...