概述
tea算法
在安全学领域,TEA(Tiny Encryption Algorithm)是一种分组加密算法,它的实现非常简单,通常只需要很精短的几行代码。TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。
TEA算法使用64位的明文分组和128位的密钥,它使用Feistel分组加密框架,需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1)231」(也就是程序中的0X9E3779B9)。
之后 TEA 算法被发现存在缺陷,作为回应,设计者提出了一个 TEA 的升级版本——XTEA(有时也被称为“tean”)。XTEA 跟 TEA 使用了相同的简单运算,但它采用了截然不同的顺序,为了阻止密钥表攻击,四个子密钥(在加密过程中,原 128 位的密钥被拆分为 4 个 32 位的子密钥)采用了一种不太正规的方式进行混合,但速度更慢了。
- //C语言的Tea算法(原始):
- void encrypt (uint32_t* v, uint32_t* k)
- {
- uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */
- uint32_t delta=0x9e3779b9; /* a key schedule constant */
- uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
- for (i=0; i < 32; i++)
- { /* basic cycle start */
- sum += delta;
- v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
- v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
- } /* end cycle */
- v[0]=v0; v[1]=v1;
- }
- void decrypt (uint32_t* v, uint32_t* k)
- {
- uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */
- uint32_t delta=0x9e3779b9; /* a key schedule constant */
- uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
- for (i=0; i<32; i++)
- { /* basic cycle start */
- v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
- v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
- sum -= delta;
- } /* end cycle */
- v[0]=v0; v[1]=v1;
- }
//C语言的Tea算法(原始):
void encrypt (uint32_t* v, uint32_t* k)
{
uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
for (i=0; i < 32; i++)
{ /* basic cycle start */
sum += delta;
v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
} /* end cycle */
v[0]=v0; v[1]=v1;
}
void decrypt (uint32_t* v, uint32_t* k)
{
uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
for (i=0; i<32; i++)
{ /* basic cycle start */
v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
sum -= delta;
} /* end cycle */
v[0]=v0; v[1]=v1;
}
最后
以上就是自由服饰为你收集整理的tea算法的全部内容,希望文章能够帮你解决tea算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复