许多年后有一股寒风,从我自以为火热温暖的从未被寒冷侵入的内心深处阵阵袭来时,我才发现穿再厚的棉衣也没用了。生命本身有一个冬天,它已经来临。
——刘亮程《寒风吹彻》
简介
- 在密码学中,微型加密算法(
Tiny Encryption Algorithm,TEA
)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。其设计者是剑桥大学计算机实验室的大卫·惠勒
与罗杰·尼达姆
。这项技术最初于1994年提交给鲁汶的快速软件加密的研讨会上,并在该研讨会上演讲中首次发表。 - 在给出的代码中:加密使用的数据为
2个32位
无符号整数,密钥为4个32位
无符号整数即密钥长度为128位
正文
关于加密算法
加密算法虽然我们可能不是非常了解底层原理,但是在现在信息安全的年代,工作中也会经常需要用的,比如:
- 非对称加密的:
RSA
、ECC
(移动设备用)、DSA
(数字签名用) - 对称加密的:
AES
,DES
- Hash算法的:
MD2
、MD4
、MD5
、HAVAL
、SHA
、SHA-1
、HMAC
、HMAC-MD5
、HMAC-SHA1
- 非对称加密的:
有时候我们可能会遇到这种情况:因为数据长度有限制,需要加密后的数据长度尽可能的短。比如如果给蓝牙的广播数据加一次密做单向的校验。但是在iOS开发中,自定义广播的数据长度是有限的,总共可用的才31个字节,再除去蓝牙字段名称、长度、蓝牙名称的实际值、自定义字段名称及长度等等,实际上可以给我们自定义使用的部分那真的是少的可怜。
- 但是又不能将全部的广播包数据都加密,因为苹果会先将广播数据按照协议解析完成之后,将里面的少部分数据封装成对象抛给上层供我们使用,如果整个广播包加密会导致我们无法获取到广播数据,所以就只能单独的加密自定义广播部分的数据。
- 在这里就不能使用
RSA
了,因为性能比较低、加解密比较慢;AES
这样的算法又对数据长度有要求,最低都需要16个字节;Hash算法又不可逆,无法获取原始数据。最终在技术经理的提议下,使用了一种叫XTEA
的算法,XTEA
是TEA
的升级版,增加了更多的密钥表,移位和异或操作等等。
XTEA加密过程
iOS使用
- 算法实现源码是使用C语言写的,虽然iOS可以直接调用C函数,但是直接调用总感觉很别扭,所以就将该算法直接以分类的方式简单封装一下,需要用到的小伙伴可以直接使用,因为一共就没多少行代码,直接贴代码了:
- 直接给NSData添加一个
XTEA
算法的分类,.h
文件如下:
1 | /** |
.m
文件如下:- 注意引入需要的头文件
1 | // 引入必要的头文件 |
- 使用到的数据转换
NSData
转uint32
uint32
转NSData
1 | + (uint32_t)uint32FromData:(NSData *)hexData |