【常见加密方法】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位密钥举例。
#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算法简介的更多相关文章
- qt md5加密,base64编码解码
qt md5加密,base64编码解码 md5加密 QByteArray data = "12121221"; data += "asdfas"; QByteA ...
- 【Mysql sql inject】POST方法BASE64编码注入write-up
翻到群里的小伙伴发出一道POST型SQL注入题,简单抓包判断出题目需要base64编码后才执行sql语句,为学习下SQL注入出题与闯关的思路+工作不是很忙,所以花点时间玩了一下,哈哈哈哈哈哈哈哈哈 ...
- MD5加密与base64编码
转自:http://blog.csdn.net/sxzlc/article/details/74127268 import java.io.UnsupportedEncodingException; ...
- Base64编码和解码算法
Base64么新鲜的算法了.只是假设你没从事过页面开发(或者说动态页面开发.尤其是邮箱服务),你都不怎么了解过,仅仅是听起来非常熟悉. 对于黑客来说,Base64与MD5算法有着相同的位置.由于电子邮 ...
- Base64编码 概念和用途
Base64概念 什么是Base64? 依照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把随意序列的8位字节描写叙述为一种不易被人直接识别的形式.(The Base6 ...
- java编写之jpg图片与base64编码之间的转换
/** * @author zyq * 将网络图片进行Base64位编码 * @param imgUrl * */ public static String encodeWebImageToBase6 ...
- Base64编码知识详解
在我们进行前端开发时,针对项目优化,常会提到一条:针对较小图片,合理使用Base64字符串替换内嵌,可以减少页面http请求. 并且还会特别强调下,必须是小图片,大小不要超过多少KB,等等. 那么,B ...
- 浅谈Base64编码
浅谈Base64编码 我打赌当你见到Base64这个词的时候你会觉得在哪里见过,因为在你能够上网看到这篇文章的时候你已经在后台使用它了.如果您对二进制数有所了解,你就可以开始读它了. 打开一封Emai ...
- 从原理上理解Base64编码
开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时间 ...
随机推荐
- bugku逗号过滤注入
URL:http://120.24.86.145:8002/web15/ 直接给出了源码: <?php error_reporting(0); function getIp(){ $ip = ' ...
- Python抓取学院新闻报告
Python案例 scrapy抓取学院新闻报告 任务 抓取四川大学公共管理学院官网(http://ggglxy.scu.edu.cn)所有的新闻咨询. 实验流程 1.确定抓取目标.2.制定抓取规则.3 ...
- AspxGridView在cell内显示颜色
protected void master_HtmlDataCellPrepared(object sender, ASPxGridViewTableDataCellEventArgs e) { if ...
- Mysql安装发生「Access denied for user ‘root’@’localhost’ (using password: NO)」错误
参考:http://www.aipacommander.com/entry/2014/05/26/152247 mysql_secure_installation 依赖重置密码
- python 基础 习题
1.执行 Python 脚本的两种方式2.简述位.字节的关系 1Byte = 8bits 3.简述 ascii.unicode.utf-8.gbk 的关系 都是字符集,unicode兼容其他3种字符集 ...
- HUD-5379
Mahjong tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- PHP给图片加水印具体实现
给图片加水印实现方法如下: class Mark { public function __construct() { } /** * 加水印 * @param file $srcImg 要加水印的图片 ...
- Go语言入门之变量声明
1.使用var关键字声明变量,如果没有初始化,则变量默认为零值. var a string "hello world" 2.根据值自行判定变量类型 3.多变量声明 ,, 4.使用v ...
- Windows服务器学习篇:服务器连接与退出
此文是我早期在公司内部发布的一篇给予新入职程序员基础技术培训的文章,非常基础简单,现拿出来给大家分享.当然,已工作人士可直接忽略... 一.Windows服务器连接 1. 在桌面菜单中的“运行”里,输 ...
- mp4文件DASH切片程序
mp4文件DASH切片程序 一.简介 按照DASH标准文档要求与现有的DASH切片(生成DASH切片参见mb4box命令简介)来生成Initialization Segment与Media Segme ...
